又是指针!函数与指针的化学反应

前言

学了这么久指针,发现它是真的包罗万象,不愧为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
# 指针  C 
樱花正含苞待放,春天就要来了🌸
标题:又是指针!函数与指针的化学反应
作者:bogendihong
地址:https://myjinji.top/articles/2020/08/27/1598519719360.html

评论

取消