char *p[4];是指針數組,原因:
- 優先級 () > [ ] > * ,p先和[] 結合,p是數組名,*表示數組元素是指針,char 表示指向的是字符變量;
- 從名字上也可以看出,“指針數組”,核心是數組,指針只是修飾部分,即總體上是一個數組。
sizeof(p)是16,因爲數組裏放的是指針,也就是地址,每個地址佔4個字節。同理 如果是int *p[4] 或者 double *p[4],sizeof(p)都是16。
p+1 移動4個字節。因爲p是數組名,p加1後,(p+1)指向p[1],又因爲存放的地址佔4個字節,因此只移動4個字節。
p是一個二級指針,原因:p是數組名,存放的是數組第一個元素的地址,即 &p[0],又因爲p[0]本身是char *類型,所以p的類型是char**,後一個*表示p是一個指針,前面的char *表示p指向的數據類型是char*,即p指向一個字符指針。
即 char ** s = p;是合法的。s++ 此時s指向p[1]。
sizeof(char*)的結果是4,sizeof(double)也是4.
注意:多級指針加1,移動4個字節。只要是指針,都佔4個字節。