前言
学了这么久指针,发现它是真的包罗万象,不愧为C语言的精髓
指针函数
和之前的指针数组一样,指针数组是个数组,里面的元素都是指针;指针函数也类似,指针函数是个函数,而这个函数的返回值是指针
写法也没差太多
like:
int* pointfunction(void);
int * pointfunction(void);
int *pointfunction(void);
这三种写法哪一种都可以,第一种更直观一点,在阅读代码时也好理解
例子
char *getWord(char);
char *getWord(char c) {
switch(c) {
case 'A': return "Apple";
case 'B': return "Banana";
case 'C': return "Cat";
case 'D': return "Dog";
default: return "None";
}
}
输入一个字符,按照字符返回对应的字符串。因为C语言中没有字符串数据类型,所以此函数返回的实际上是字符数组的指针
注意
指针函数不能使用局部指针变量作为返回值
因为函数的局部变量作为返回值时,会生成一个局部变量的拷贝用作返回值,之后局部变量会被系统回收,如果返回局部变量的地址,系统回收后,指针指向的内容就无意义了,但是对于静态变量来说可以返回其指针
warning: function returns address of local variable
函数指针
PS: 在函数编译后,会占据一部分内容,函数名就是这段函数的首地址
函数指针,首先它是一个指针,第二它指向的位置是一个函数
格式
返回值类型 (*指针名)(参数列表);
int (*pointerfunction)(int, int);
在参数列表中,可以写数据类型和名称,也可以选择省略不写,这和函数原型类似
小例子
int add(int a, int b) {
return a + b;
}
// 定义函数指针
int (*fp)(int, int); // int (*fp)(int, int) = add;
// 指向函数
fp = add; 或者在声明时就可以指向函数 ↑
int result = (*fp)(3, 5); // int result = fp(3, 5) 这么写也是没有问题的
printf("result = %d", result); // 8