赞
踩
指针函数,简单的来说,就是一个返回指针的函数,其本质是一个函数,而该函数的返回值是一个指针
【格式】:返回类型* 函数名(参数表)
int func(int x, int y)
int* func(int x, int y)
下面展示一个指针函数的相关案例
Open()
函数从外界接收一个值,用于在函数内部开辟出一块大小为n的空间,然后return返回,返回类型为int*
,此时外界使用int*
来进行接收,就获取到了函数内部开辟出这个数组的首元素地址,然后通过循环为数组中n个元素初始化int* Open(int n) { int* a = (int*)malloc(sizeof(int) * n); if (NULL == a) { perror("fail malloc"); exit(-1); } return a; } int main(void) { int n = 10; int* arr = Open(n); memset(arr, 0, sizeof(int) * n); for (int i = 0; i < n; ++i) { *(arr + i) = i + 1; } printf("Initialized Successfully\n"); return 0; }
通过运行结果可以看出确实可以起到初始化数组的效果
讲完指针函数,我们也来说说它的双胞胎兄弟 —— 函数指针
经过上面所讲的字符指针、数组指针,相信你马上就能类比出函数指针:没错,它就是一个指针,所指向的就是一个数组
数组名
和&数组名
的区别,虽然它们都指向数组的首元素地址,但是在它们往后偏移时,访问的字节数却不同;既然一个数组可以取出它的地址,那么函数是否可以取出它的地址呢?一起来看看函数名
还是&函数名
,它们的地址都是相同的,这是为什么呢?这就是语法规定的,一个函数名取不取地址都是这个函数的地址,因为对于函数来说也没有什么首函数的地址,是吧对于数组的地址,我们可以用数组指针保存起来,那函数可以吗?当然可以,使用到的就是【函数指针】
//下面pfun1和pfun2哪个有能力存放test函数的地址?
void (*pfun1)();
void *pfun2();
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。