先上例题
1、“`
char *p={
“how are you”,
“hello”,
“what’s your name”};
这里p的类型不是char*,而是char * *
2、```
char a[20]="my name is Jang"
char *p=a;
char** q=&p;
printf("%p",**q);
q++;
printf("%p",**q);
正确输出:第一个m
第二个无意义
其中第一个一般没问题,重点看第二个。第二个输出的常见错误有两个:
错误一:输出y,认为q指向char类型,q++后,后移一个字节,指向y
错误二:输出m,认为q指向char*类型,q++后,后移四个字节即&p+4,指向m,即(&p+4)==m。但是其实(p+4)才是m
正确思路:q的类型是char**, 指向char 类型, 其指向的地址就是p的地址&p, ptr++后 , 会 使 指 针 加 一 个 sizeof(char), , 即 &p+4; 那 *(&p+4) 指向的地方不清楚,无意义。