1.指针(型)函数
指针函数概念:
本质上还是个函数,因其返回值是一个指针而得名。
在C语言中允许一个函数的返回值是一 个指针(即地址),这种返回指针值的函数称为指针型函数
指针函数的定义和使用:
-
格式:
类型说明符 *函数名(形参表) { /*函数体*/ }
其中函数名之前加了“*”号表明这是一个指针型函数,即返回值是一个指针。类型说明符表示了 返回的指针值所指向的数据类型。
#include <stdio.h> char *func(char str[]); char *function(char *p); int main(int argc, const char * argv[]) { /* 返回指针的函数 */ char cs[] = "VSVSVSVSVS"; char *str = func(cs); printf("%s\n",str); char *str2 = function(cs); printf("%s\n",str2); return 0; } // 定义一个返回指针的函数 char *func(char str[]) // 传数组 { str[0] = ‘!‘; return str; } char *function(char *p) // 传指针 { p[0] = ‘@‘; return p; }
2.函数(型)指针(重点)
函数指针:
本质上是一个指针,因该指针指向的是一个函数而得名。
为什么指针可以指向一个函数?
函数作为一段程序,在内存中也要占据部分存储空间,它也有一个起始地址,即函数的入口地址。函数有自己的地址,那就好办了,我们的指针变量就是用来存储地址的。因此,可以利用一个指针指向一个函数。其中,函数名就代表着函数的地址。
函数指针的定义和使用:
格式:
函数的返回值类型 (*指针变量名)(形参1, 形参2, ...);
- 其中“类型说明符”表示被指函数的返回值的类型。
- “( 指针变量名)”表示“”后面的变量是定义的指针变量。
- 最后的空括号表示指针变量所指的是一个函数。
// 无参数,无返回值的函数型指针 #include <stdio.h> void func(); int main(int argc, const char * argv[]) { void (*funcP)(); // 定义指向函数的指针 funcP = func; // 初始化 指向函数的 指针 func(); // 方法一:函数调用 (*funcP)(); // 方法二: 利用指针调用函数 funcP(); // 方法三: 利用指针调用函数 } void func() { printf("我被执行了!"); }
// 有参数,无返回值的函数型指针 #include <stdio.h> void sum(int v1,int v2); int main(int argc, const char * argv[]) { void (*sumP)(int,int); // 定义一个指向函数的指针 sumP = sum; // 初始化函数指针 sumP(10,20); // 利用函数指针调用函数 (*sumP)(20,30); // 利用函数指针调用函数 // *sumP(20,30); // 错误写法,因为()的优先级高于* } void sum(int v1,int v2) { printf("sum = %d\n",v1 + v2); }
// 无参数,有返回值的函数型指针 #include <stdio.h> int getAge(); int main(int argc, const char * argv[]) { int (*getAgeP)(); getAgeP = getAge; int age1 = getAgeP(); // 利用函数指针调用函数 int age2 = (*getAgeP)(); // 利用函数指针调用函数 printf("%d,%d",age1,age2); } int getAge() { return 26; }
// 有参数,有返回值的函数型指针 #include <stdio.h> int minus(int, int); int main(int argc, const char * argv[]) { int (*minusP)(int,int); // 定义一个指向函数的指针 minusP = minus; // 初始化函数指针 int res = (*minusP)(20,1); // 利用函数指针调用函数 int result = minusP(90,9); // 利用函数指针调用函数 printf("res = %d,result = %d\n",res,result); } int minus(int val1, int val2) { return val1 - val2; }
时间: 2024-10-06 06:17:38