自己的总结
1 五.指针数组和数组指针
2 1.指针数组 char *p[3];每个元素都是指针
3 int main(void)
4 {
5 char *p1 = "sadqwdq";
6 char *p2 = "wqdcd";
7 char *p3 = "32131";
8
9 char *p[3] = {"sadqwdq","wqdcd","32131"};
10
11 //即这个指针数组可以和上面的指针有这样的对应关系
12
13 p[1] = p1; //因为数组p的每个元素都是指针,所以可以和普通指针进行等价赋值操作。
14 *(p+2) = p2;
15 *(p+3) = p3;
16
17 "注意下面这种状况,是错误的"
18 scanf("%s",p[1]);
19 scanf("%s",p+1);
20 strcpy(p[1],"sadqw");
21 strcpy(p+1,"sada");
22 "原因:因为不管是 p[1] 还是 p+1 都是以个指针,而且是无内存空间,所以不可以往里面写内容。"
23 }
24 2.数组指针:是一个指针,指向一个数组
25 int main(void)
26 {
27 char (*p)[10];
28 char str[3][10] = {"sadwq","casas","1323"};
29 p = str; "此时p指向数组的第一行首地址,此时指针具有内存(含一个一维数组,10个char型)"
30 printf("%s",p+1); "此时 p+1 是一个指针,指向数组 str 的第二行首地址,而且它具有内存,是10个char型大小,可以进行写入操作"
31 strcpy("%s",p+1); "p+1 的内容就会被改变"
32
33 "但是它不能进行下述操作"
34 p+1 = "srqweq"; 因为 "srqweq" 是一个常量区字符串,写在等号右边意思是把字符串的首地址赋给它。
35 因为 1.指针 p 每次 +1 会跳10个char型,即10个字节。 而常量字符串的指针,是普通字符指针,每次 +1 只会跳 4 会跳10个char型,即10个字节。
36 步长不一样,编译器会报错。不能进行赋值。
37 2."更重要的是:此时p+1指向二维数组第二行的首地址(含一个一维数组),单纯的地址交换,将使数组的一维数组首地址丢失"
38
39
40 }