C语言-指针作为函数形参类型

简介: C语言-指针作为函数形参类型

1. 前言

C语言函数里最常用就是指针传参和返回地址,特别是字符串处理中,经常需要封装各种功能函数完成数据处理,并且C语言标准库里也提供了string.h 头文件,里面包含了很多字符串处理函数;这些函数的参数和返回值几乎都是指针类型。这篇文章就介绍如何使用指针作为函数参数、并且使用指针作为函数返回值。


下面通过几个示例代码来演示用法。


2. 通过指针间接修改主函数里局部变量空间的值

#include <stdio.h>
#include <string.h>
void func(int *p);
int main()
{
  int a=100;
  func(&a);
  printf("a=%d\n",a); //200
  return 0;
}
void func(int *p)
{
  printf("p=%d\n",*p);
  *p=200;
}

3. 在子函数里通过指针类型间接交换main函数里局部变量空间的值

#include <stdio.h>
#include <string.h>
void func(int *a,int *b);
int main()
{
  int a=100,b=200;
  func(&a,&b); //func(100,200)
  printf("a=%d,b=%d\n",a,b);
  return 0;
}
void func(int *a,int *b)
{
  int c;
  c=*a;
  *a=*b;
  *b=c;
}
//return语句只能返回一个值
//如果函数想返回多个值,可以使用指针(形参)实现。

4. 函数返回指针类型

#include <stdio.h>
#include <string.h>
char *func(char *p);
int main()
{
  char str[]="1234567890";
  char *p;
  p=func(str);
  printf("%s\n",p); //
  return 0;
}
char *func(char *p)
{
  p+=3; //p向后偏移3个字节
  return p;
}

5. 编写一个计算字符串长度的函数

函数功能: 传入字符串,返回字符串的长度。

与strlen函数功能一样即可。

#include <stdio.h>
#include <string.h>
int my_strlen(char *p); //函数声明
int main()
{
  char buff[100];
  int len;
  printf("请输入字符串:");
  scanf("%s",buff);
  len=my_strlen(buff);
  printf("len=%d\n",len);
  return 0;
}
//每个函数的功能要单一
//计算字符串长度。  字符串特点结尾是有'\0'
//"1234567890"
int my_strlen(char *p)
{
  char *str=p;
  while(*str++!='\0'){}
  return str-p-1;
}

6. 编写一个字符串排序函数

函数功能: 传入字符串,在函数里实现字符串从大到小或者小到大排序。

注意: 从大到小或者小到大排序可以通过函数形参区分。

#include <stdio.h>
#include <string.h>
int my_strlen(char *p); //函数声明
void str_sort(char *p,char flag);//函数声明
int main()
{
  char buff[100];
  int len;
  printf("请输入字符串:");
  scanf("%s",buff);
  //进行排序
  str_sort(buff,0);
  printf("从小到大排序=%s\n",buff);
  str_sort(buff,1);
  printf("从大到小排序=%s\n",buff);
  return 0;
}
//每个函数的功能要单一
//计算字符串长度。  字符串特点结尾是有'\0'
//"1234567890"
int my_strlen(char *p)
{
  char *str=p;
  while(*str++!='\0'){}
  return str-p-1;
}
/*
函数功能: 实现字符串排序.支持从小到大或者大到小
函数形参: 
  char *p  将要排序的字符串
  char flag  选择排序方式  0表示从小到大排序  1表示大到小排序
*/
void str_sort(char *p,char flag)
{
  int len;
  int i,j,tmp;
  len=my_strlen(p);
  for(i=0;i<len-1;i++)
  {
    for(j=0;j<len-1-i;j++)
    {
      if(flag)//1表示大到小排序
      {
        if(p[j]<p[j+1])
        {
          tmp=p[j];
          p[j]=p[j+1];
          p[j+1]=tmp;
        }
      }
      else//0表示从小到大排序
      {
        if(p[j]>p[j+1])
        {
          tmp=p[j];
          p[j]=p[j+1];
          p[j+1]=tmp;
        }
      }
    }
  }
}
//unsigned char a; // 0~255   占1  =8位    1111 11111
//char a; //-128 ~ +127  

7.变量默认的系统初始化值

#include <stdio.h>
#include <string.h>
int a1;
int main()
{
  int a2;
  static int a3;
  printf("a1=%d\n",a1); //0
  printf("a2=%d\n",a2); //随机值
  printf("a3=%d\n",a3); //0
  return 0;
}
/*
全局变量默认值是0
局部变量默认值是随机值(系统没有赋值)
静态变量默认值是0
*/
目录
相关文章
|
1月前
|
存储 C语言 开发者
【C语言】字符串操作函数详解
这些字符串操作函数在C语言中提供了强大的功能,帮助开发者有效地处理字符串数据。通过对每个函数的详细讲解、示例代码和表格说明,可以更好地理解如何使用这些函数进行各种字符串操作。如果在实际编程中遇到特定的字符串处理需求,可以参考这些函数和示例,灵活运用。
70 10
|
1月前
|
存储 程序员 C语言
【C语言】文件操作函数详解
C语言提供了一组标准库函数来处理文件操作,这些函数定义在 `<stdio.h>` 头文件中。文件操作包括文件的打开、读写、关闭以及文件属性的查询等。以下是常用文件操作函数的详细讲解,包括函数原型、参数说明、返回值说明、示例代码和表格汇总。
53 9
|
1月前
|
C语言 开发者
【C语言】数学函数详解
在C语言中,数学函数是由标准库 `math.h` 提供的。使用这些函数时,需要包含 `#include <math.h>` 头文件。以下是一些常用的数学函数的详细讲解,包括函数原型、参数说明、返回值说明以及示例代码和表格汇总。
53 6
|
1月前
|
存储 C语言
【C语言】输入/输出函数详解
在C语言中,输入/输出操作是通过标准库函数来实现的。这些函数分为两类:标准输入输出函数和文件输入输出函数。
296 6
|
1月前
|
存储 缓存 算法
【C语言】内存管理函数详细讲解
在C语言编程中,内存管理是至关重要的。动态内存分配函数允许程序在运行时请求和释放内存,这对于处理不确定大小的数据结构至关重要。以下是C语言内存管理函数的详细讲解,包括每个函数的功能、标准格式、示例代码、代码解释及其输出。
67 6
|
存储 C语言
C语言的类型提升
本文的copyleft归gfree.wind@gmail.com所有,使用GPL发布,可以自由拷贝,转载。但转载请保持文档的完整性,注明原作者及原链接,严禁用于任何商业用途。 作者:gfree.wind@gmail.com 博客:linuxfocus.blog.chinaunix.net  每天都会看CU的博客,尤其是CU首页上面的博客。
928 0
|
3月前
|
C语言 C++
C语言 之 内存函数
C语言 之 内存函数
44 3
|
1月前
|
存储 Unix Serverless
【C语言】常用函数汇总表
本文总结了C语言中常用的函数,涵盖输入/输出、字符串操作、内存管理、数学运算、时间处理、文件操作及布尔类型等多个方面。每类函数均以表格形式列出其功能和使用示例,便于快速查阅和学习。通过综合示例代码,展示了这些函数的实际应用,帮助读者更好地理解和掌握C语言的基本功能和标准库函数的使用方法。感谢阅读,希望对你有所帮助!
44 8
|
1月前
|
C语言 开发者
【C语言】断言函数 -《深入解析C语言调试利器 !》
断言(assert)是一种调试工具,用于在程序运行时检查某些条件是否成立。如果条件不成立,断言会触发错误,并通常会终止程序的执行。断言有助于在开发和测试阶段捕捉逻辑错误。
44 5
|
2月前
|
存储 人工智能 算法
数据结构实验之C 语言的函数数组指针结构体知识
本实验旨在复习C语言中的函数、数组、指针、结构体与共用体等核心概念,并通过具体编程任务加深理解。任务包括输出100以内所有素数、逆序排列一维数组、查找二维数组中的鞍点、利用指针输出二维数组元素,以及使用结构体和共用体处理教师与学生信息。每个任务不仅强化了基本语法的应用,还涉及到了算法逻辑的设计与优化。实验结果显示,学生能够有效掌握并运用这些知识完成指定任务。
62 4