您的位置:首页 > 其它

函数指针,数组指针等知识总结

2017-10-25 13:04 288 查看
1、函数指针的实质还是指针,还是指针变量。本身占4字节(在32位系统中,所有的指针都是4字节)

2、函数指针、数组指针、普通指针之间并没有本质区别,区别在于指针指向的东西是个什么玩意。

3、typedef char* (*pType)(char *, const char *);
pType fun1;

分析:这句重命名了一种类型,这个新类型名字叫pType,类型是:char* (*)(char *, const char *);

也就是说pType是数据类型,fun1是变量

4、char* (*pType)(char *, const char *);

分析:定义了一个类型为 char* (*)(char *, const char *)的变量 pType

5、二重指针和指针数组

int *p1[5];

int **p3;

p3 = p1

分析: p1是指针数组名,本质上是数组名,数组名做右值表示数组首元素首地址。
数组的元素就是int *类型,所以p1做右值就表示一个int *类型变量的地址,
所以p1就是一个int类型变量的指针的指针,所以它就是一个二重指针int **;

6、最后在对一点小概念做下说明:

(1)指针数组的实质是一个数组,这个数组中存储的内容全部是指针变量。 int *p[5]

(2)数组指针的实质是一个指针,这个指针指向的是一个数组。 int (*p)[5]

7、二维数组的指针访问:

int a[2][5] a的数据类型为 int (*p)[5]  不明白的可以参考之前的博客

二维数组的指针访问: a[i][j]等同于 *(*(p+i)+j) p是a的数据类型

举例说明:

p3 = a; // 首元素首地址,等同于&a[0]

//p3 = &a[0];

printf("a[0][3] = %d.\n", *(*(p3+0)+3));

printf("a[1][4] = %d.\n", *(*(p3+1)+4));
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: