天天看點

C語言深度解剖(精講版)——讀書筆記19 &&自己的一些了解

第四章  指針和數組

再論a 和 &a之間的差別:

char   a[5]={'A','B','C','D'};  

首先強調1個知識點:

a 和 &a的值是相同的,但是意義不相同;a是數組首元素的首位址; &a是整個數組首位址;

下面來看一下:

int main()
{
  char a[5]={'A','B','C','D
  char (*p3)[3] = &a;
  char (*p4)[3] = a;
  return 0;
}
           

上面對p3和p4的使用,哪個是正确的?p3+1  的值會是多少?p4+1 的值?

解析:

在C語言中,指派符号“=”兩邊必須是相同的類型,p3定義的“=”兩邊都是數組的指針,一緻!  p4定義的“=”兩邊資料類型不一緻!左邊的類型是指向整個數組的指針,右邊的資料類型是指向單個字元指針。由于&a和a的值一樣,而變量作為右值時編譯器隻是取變量的值,是以運作并沒有什麼問題。(不過警告你别這麼用)

   (*p3)[3] = &a;  而  p3+1 後,p3指向元素'D'   char (*p4)[3] = a; p4+1後,p4同樣指向'D'

變變呢?

int main()

{

char a[5]={'A','B','C','D'};

char (*p3)[10] = &a;

char (*p4)[10] = a;

return 0;

}

這兩種會有什麼樣的問題?p3+1和 p4+1的值又是多少?

p3+1後,p3指針值加10,具體是什麼不确定

而p4初始化編譯通不過

繼續閱讀