對指針的理解2

     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個字節。

發佈了29 篇原創文章 · 獲贊 4 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章