目录
0 指针
0.1 分类
如上图
0.2 解析方法
0.3 数据类型
一维数组的数据类型为 char *,多维数组因为必须限制除第一维外所有的维度,故数据类型如下举例:
char array1[] = "a01";
char *p1 = array1;
char array2[][4] = {"a01", "a02", "a03"};
char (*p2)[4] = array2;
char array3[][3][4] = {
{"a01","a02","a03","a04"},
{"b01","b02","b03","b04"},
};
char (*p3)[3][4] = array3;
array1 的维度为:(4,) array1 和 p1 的数据类型为:char *
array2 的维度为:(3, 4) array2 和 p2 的数据类型为:char (*)[4]
array3 的维度为:(2, 3, 4) array3 和 p3 的数据类型为:char (**)[3][4]
而对于如下
char **p4 = &p1;
char (**p5)[4] = &p2;
char (**p6)[3][4] = &p3;
p4 的数据类型为:char **
p5 的数据类型为:char (**)[4]
p6 的数据类型为:char (**)[3][4]
char **p7 = &p5;
char (**p8)[4] = &p6;
char (**p9)[3][4] = &p7;
p7 的数据类型为:char ***
p8 的数据类型为:char (***)[4]
p9 的数据类型为:char (***)[3][4]
0.4 普通指针
对于最普通的指针,如下图所示
举例
char v = 'a';
char *p = &v;
char *p = “a01”;
参数传递
p 是指针,其数据类型为 char *,需要 char ** 来接收
char *p;
char **rec = &p;
1 多级指针
(1) char **p
char c = 'a';
char *p1 = &c;
char **p = &p1;
参数传递
p 是指针,其数据类型为 char **,需要 char *** 来接收
char **p;
char ***rec = &p;
(2) char ***p
同理
2 指针数组
元素为指针的数组
p 本身是数组,而数组内部的元素是指针
先定义如下:
char c1 = 'a', c2 = 'b', c3 = 'c', c4 = 'd', c5 = 'e', c6 = 'f';
char *pc1 = &c1, *pc2 = &c2, *pc3 = &c3, *pc4 = &c4, *pc5 = &c5, *pc6 = &c6;
(1) char *p[]
char *p[] = {&c1, &c2, &c3};
重申一下!p 只是个数组(p表示数组的首地址),不能给 p 赋值(也不能指向任何东西)
比如,下面这样是错误的:
char array2[][4]= {&c1, &c2, &c3}; char