C语言-返回指针的函数与指向函数的指针
返回指针的函数
指针也是C语言中的一种数据类型,因此一个函数的返回值肯定可以是指针类型的。
返回指针的函数的一般形式为:类型名 * 函数名(参数列表)
比如下面这个函数,返回一个指向char类型变量的指针
// 将字符串str中的小写字母变成大写字母,并返回改变后的字符串 // 注意的是:这里的参数要传字符串变量,不能传字符串常量 char * upper(char *str) { // 先保留最初的地址。因为等会str指向的位置会变来变去的。 char *dest = str; // 如果还不是空字符 while (*str != '\0') { // 如果是小写字母 if (*str >= 'a' && *str <= 'z') { // 变为大写字母。小写和大写字母的ASCII值有个固定的差值 *str -= 'a' - 'A'; } // 遍历下一个字符 str++; } // 返回字符串 return dest; }
调用函数:
int main() { // 定义一个字符串变量 char str[] = "dhu"; // 调用函数 char *dest = upper(str); printf("%s", dest); return 0; }
指向函数的指针
函数作为一段程序,在内存中也要占据部分存储空间,它也有一个起始地址,即函数的入口地址。函数有自己的地址,那就好办了,我们的指针变量就是用来存储地址的。因此,可以利用一个指针指向一个函数。其中,函数名就代表着函数的地址。
定义的一般形式:函数的返回值类型 (*指针变量名)(形式参数1, 形式参数2, ...);
1 #include <stdio.h> 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和int b代表着sum函数的形参,其实完全可以省略。第10行、11行、12行都是可行
* 在第15行,先利用*p取出指向的函数,再传入参数调用函数。也可以采用第16行中的做法,这样就跟调用普通函数没什么区别
最后的输出结果:
,毫无意外
浙公网安备 33010602011771号