自己的总结

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 }

原文地址:https://www.cnblogs.com/dpf-learn/p/6108972.html