【C语言】12 返回指针的函数…
来源:互联网 发布:php 获取地区 编辑:程序博客网 时间:2024/05/18 03:22
1.返回指针的函数
返回指针的函数的一般形式为:类型名 * 函数名(参数列表)
1 // 将字符串str中的小写字母变成大写字母,并返回改变后的字符串 2 // 注意的是:这里的参数要传字符串变量,不能传字符串常量 3 char * upper(char *str) { 4 // 先保留最初的地址。因为等会str指向的位置会变来变去的。 5 char *dest = str; 6 7 // 如果还不是空字符 8 while (*str != '\0') { 9 // 如果是小写字母10 if (*str >= 'a' && *str <= 'z') {11 // 变为大写字母。小写和大写字母的ASCII值有个固定的差值12 *str -= 'a' - 'A';13 }14 15 // 遍历下一个字符16 str++;17 }18 19 // 返回字符串20 return dest;21 }
2.指向函数的指针
1.为什么指针可以指向一个函数?
函数作为一段程序,在内存中也要占据部分存储空间,它也有一个起始地址,即函数的入口地址。函数有自己的地址,那就好办了,我们的指针变量就是用来存储地址的。因此,可以利用一个指针指向一个函数。其中,函数名就代表着函数的地址。
2.指向函数的指针的定义
定义的一般形式:函数的返回值类型 (*指针变量名)(形式参数1, 形式参数2,...);
注意:形式参数的变量名可以省略,甚至整个形式参数列表都可以省略
1 #include 2 3 int sum(int a, int b) { 4 return a + b; 5 } 6 7 int main() 8 { 9 // 定义一个指针变量p,指向sum函数10 int (*p)(int a, int b) = sum;11 // 或者 int (*p)(int, int) = sum;12 // 或者 int (*p)() = sum;13 14 // 利用指针变量p调用函数15 int result = (*p)(1, 3);16 // 或者 int result = p(1, 3);17 18 printf("%d", result);19 return 0;20 }
* 首先在第3行定义了一个sum函数,接收2个int类型的参数,返回值类型为int
*然后在第10行定义了一个指向sum函数的指针变量p。注意p的定义形式:int(*p)(int a, int b),第1个int代表sum函数的返回值是int类型,然后*p是用括号()包住的,后面的int a和intb代表着sum函数的形参,其实完全可以省略。第10行、11行、12行都是可行
*在第15行,先利用*p取出指向的函数,再传入参数调用函数。也可以采用第16行中的做法,这样就跟调用普通函数没什么区别
最后的输出结果:,毫无意外
3.使用注意
1> 由于这类指针变量存储的是一个函数的入口地址,所以对它们作加减运算(比如p++)是无意义的。难道p++就会指向下一个函数了?可笑至极!!没这回事。
2> 返回指针的函数的定义char *upper(char *str) 和 指向函数的指针的定义int (*p)(int a,
3> 指向函数的指针变量主要有两个用途:
调用函数
将函数作为参数在函数间传递。我这么一说,可能还不是很明白,举个例子。
1 #include 2 3 // 减法运算 4 int minus(int a, int b) { 5 return a - b; 6 } 7 8 // 加法运算 9 int sum(int a, int b) {10 return a + b;11 }12 13 // 这个counting函数是用来做a和b之间的计算,至于做加法还是减法运算,由函数的第1个参数决定14 void counting( int (*p)(int, int) , int a, int b) {15 int result = p(a, b);16 printf("计算结果为:%d\n", result);17 }18 19 int main()20 {21 // 进行加法运算22 counting(sum, 6, 4);23 24 // 进行减法运算25 counting(minus, 6, 4);26 27 return 0;28 }
如果以后想再增加一种乘法运算,非常简单,根本不用修改counting函数的代码,只需要再增加一个乘法运算的函数
int mul(int a, int b) { return a * b;}
然后counting(mul, 6, 4);就可以进行乘法运算了
- 【C语言】12 返回指针的函数…
- C语言指针作为函数返回值
- C返回指针的函数
- 深入理解C语言中的指向函数的指针和返回指针的函数!
- 【C语言】14-返回指针的函数与指向函数的指针
- C语言中返回指针的函数和指向函数的指针
- 【C语言】14-返回指针的函数与指向函数的指针
- 【C语言】14-返回指针的函数与指向函数的指针
- 【C语言】14-返回指针的函数与指向函数的指针
- C语言-返回指针的函数与指向函数的指针
- C语言中关于返回指针的函数和指向函数的指针
- c语言指向函数的指针和返回指针的函数
- C语言 返回指针的函数与指向函数的指针
- 【C语言】返回指针的函数与指向函数的指针
- C 返回函数指针的函数
- C语言 const 指针使用技巧之——返回指针的函数
- C语言学习(六)指针5 返回指针的函数
- C语言提高-第7讲: 返回指针的函数(回顾“野指针”)
- 【C语言】10 指向一维数组元…
- java netty之ByteToMessageDecoder
- 部分图表组件调研总结
- 【C语言】11 指针和字符串
- SQL 学习笔记
- 【C语言】12 返回指针的函数…
- 【C语言】13 预处理指令1-宏定义
- 图的高效数据结构表示
- 【C语言】14 预处理指令--条件编译
- WCHAR,CHAR,TCHAR的区别
- 【C语言】15 预处理指令--文件包含
- 【C语言】16 变量类型
- 【C语言】17 static和extern…
- 【C语言】18 static和extern-…