C语言_函数指针数组指针
2017-11-23 22:17
225 查看
函数指针数组指针?这是个啥玩意?第一次遇到我也是黑人问号脸,后来发现理解这个其实也不难,就是一个指向数组的指针而已,而这个数组里面的元素保存的是指向函数的指针。我们可以先从指针数组开始了解,由浅入深。
一、指针
指针就是地址,指针变量才是可以保存地址的变量,不过我们一般把指针变量简称为指针而已。指针变量的大小永远都是4个字节,指针的类型决定他指向数据的类型。
二、指针数组
指针数组是一个数组,元素是由指针变量组成的。
int *p[ ];
int *p[5]; //有5个元素的一维数组,每个元素都是一个int* 类型的指针变量
int *p[2][3]; //一个二维指针数组,
int *(p[ ]); //因为[ ]的优先级比*的高,所以这里的()可以省略。
输出的结果是 1 2 3
三、数组指针
数组指针是一个指针变量,这个指针指向一个数组。
int (*p)[ ];
int (*p)[5]; //指向一个有5个元素数组的指针
输出结果:a d g h
**p1和p[0][0]是等价的,p1指向arr1数组的首地址,p1[0][3]等价于(*p)[3]就相当于arr[3]了。
p2[1][2]等价于*(*(p+1)+2),代表arr[1][2].
在内存里,因为p1是char*[5]类型,所以p1+1就是往高地址挪5个字节,*p1是char*类型,*p1+1是望高地址挪一个字节。
四、函数指针
是一个指针变量,一个指向函数的指针变量
p就是指向函数fun的指针变量,可以通过*p实现对fun函数的调用。
五、函数指针数组
是一个数组,成员是函数指针变量的数组。
其实这个的理解可以参照指针数组,指针数组成员是指针变量,函数指针数组成员是函数指针变量。在我个人的理解,函数指针变量是指针变量的一种,所以函数指针数组也是指针数组的一种。
关于函数指针数组的定义 int *p[ ] ( );表示为成员类型是int* ()函数指针的数组。
六、函数指针数组指针
讲了半天终于到我我们最终目的地,前面讲了这么多再看过来相信已经心里有了答案,函数指针数组指针就是一个指针变量,一个指向数组的指针变量,一个指向成员是函数指针变量的数组的指针变量。是数组指针的一种,所以用法其实也与数组指针差不多了。
输出结果:fun1
fun2
fun3
一、指针
指针就是地址,指针变量才是可以保存地址的变量,不过我们一般把指针变量简称为指针而已。指针变量的大小永远都是4个字节,指针的类型决定他指向数据的类型。
二、指针数组
指针数组是一个数组,元素是由指针变量组成的。
int *p[ ];
int *p[5]; //有5个元素的一维数组,每个元素都是一个int* 类型的指针变量
int *p[2][3]; //一个二维指针数组,
int *(p[ ]); //因为[ ]的优先级比*的高,所以这里的()可以省略。
int main() { int a=1; int b=2; int c=3; int *p1=&a; int *p2=&b; int *p3=&c; int *p[]={p1,p2,p3}; printf("%d %d %d\n",*p[0],*p[1],*p[2]); return 0; }
输出的结果是 1 2 3
三、数组指针
数组指针是一个指针变量,这个指针指向一个数组。
int (*p)[ ];
int (*p)[5]; //指向一个有5个元素数组的指针
char arr1[5] = "abcde"; char(*p1)[5] = &arr1; char arr2[5][5] = { "abcde", "fghij" }; char(*p2)[5] = arr2; printf("%c %c %c %c",**p1,p1[0][3],*(*(p2+1)+1),p2[1][2]);
输出结果:a d g h
**p1和p[0][0]是等价的,p1指向arr1数组的首地址,p1[0][3]等价于(*p)[3]就相当于arr[3]了。
p2[1][2]等价于*(*(p+1)+2),代表arr[1][2].
在内存里,因为p1是char*[5]类型,所以p1+1就是往高地址挪5个字节,*p1是char*类型,*p1+1是望高地址挪一个字节。
四、函数指针
是一个指针变量,一个指向函数的指针变量
void *str1; void *str2; void fun(void* p1,void* p2); void (*p)(void*,void*)=fun; (*p)(str1,str2);
p就是指向函数fun的指针变量,可以通过*p实现对fun函数的调用。
五、函数指针数组
是一个数组,成员是函数指针变量的数组。
其实这个的理解可以参照指针数组,指针数组成员是指针变量,函数指针数组成员是函数指针变量。在我个人的理解,函数指针变量是指针变量的一种,所以函数指针数组也是指针数组的一种。
关于函数指针数组的定义 int *p[ ] ( );表示为成员类型是int* ()函数指针的数组。
六、函数指针数组指针
讲了半天终于到我我们最终目的地,前面讲了这么多再看过来相信已经心里有了答案,函数指针数组指针就是一个指针变量,一个指向数组的指针变量,一个指向成员是函数指针变量的数组的指针变量。是数组指针的一种,所以用法其实也与数组指针差不多了。
void fun1() { printf("fun1\n"); } void fun2() { printf("fun2\n"); } void fun3() { printf("fun3\n"); } int main() { void* p1=fun1; void* p2=fun2; void* p3=fun3; void *arr[3]()={p1,p2,p3}; void *(*p)[3]()=arr; p[0][0]; p[0][1]; p[0][2]; }
输出结果:fun1
fun2
fun3
相关文章推荐
- C语言 复杂指针的申明问题 数组指针 指针数组 函数指针 指针函数一览无遗! C/C++求职面试必备考点(四)
- C语言中,数组名作为参数传递给函数时,退化为指针
- 水滴石穿C语言之指针、数组和函数
- c语言:数组指针,指针数组,函数指针,函数指针数组,指向函数指针数组的指针
- 程序猿之---C语言细节1(==与=、函数指针、数组字符串printf、int ((b));、char b =‘abcd’)
- c语言复杂变量声明(数组、指针、函数)
- C语言提高-第23/24/25讲: 指针的运算/数组名作为函数参数/指针作函数参数(一维数组Vs指针)
- C语言之指针、数组和函数
- C语言指针、指针函数与函数指针、指针数组与数组指针
- C语言之数组专题:数组指针、指针数组、数组做函数参数退化、数组名、数组类型
- 水滴石穿C语言之指针、数组和函数
- 20170215C语言提升08_指针_02数组指针及指针数组及函数指针
- c语言学习,指针函数、函数指针、指针的指针、指向指针数组的指针
- C语言之指针、数组和函数
- C语言中,数组名作为参数传递给函数时,退化为指针
- c语言复杂变量声明(数组、指针、函数)
- C语言中的指针(指针数组 数组指针 函数指针 函数指针数组 指向函数指针数组的指针)
- (转载) C语言技巧:怎样把数组作为参数传递给函数?(值传递和指针传递)
- 20170215C语言提升08_指针_02数组指针及指针数组及函数指针
- C语言指针系列 - 一级指针.一维数组,二级指针,二维数组,指针数组,数组指针,函数指针,指针函数