第四章 指針和數組
再論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初始化編譯通不過