在C語言中什么是指針和數組等價
在C語言中對數組和指針的困惑多數都來自這句話。說數組和指針“等價”不表示它們相同, 甚至也不能互換。它的意思是說數組和指針的算法定義可以用指針方便的訪問數組或者模擬數組。
特別地,等價的基礎來自這個關鍵定義:
一個T 的數組類型的左值如果出現在表達式中會蛻變為一個指向數組第一個成員的指針(除了三種例外情況); 結果指針的類型是T的指針。
這就是說, 一旦數組出現在表達式中, 編譯器會隱式地生成一個指向數組第一個成員地指針, 就像程序員寫出了&a[0] 一樣。例外的.情況是, 數組為sizeof 或&操作符的操作數, 或者為字符數組的字符串初始值。
作為這個這個定義的后果, 編譯器并那么不嚴格區分數組下標操作符和指針。在形如a[i] 的表達式中, 根據上邊的規則, 數組蛻化為指針然后按照指針變量的方式如p[i] 那樣尋址, 如問題6.2 所述, 盡管最終的內存訪問并不一樣。如果你把數組地址賦給指針:
p = a;
那么p[3] 和a[3] 將會訪問同樣的成員。
【在C語言中什么是指針和數組等價】相關文章:
簡述數組與指針的區別12-13
C++筆試題:關于鏈表和指針12-17
C語言中一個結構不能包含指向自己的指針12-27
c語言指針面試常見問題09-28
函數指針的定義是什么12-19
Javascript的常規數組和關聯數組的對比小結11-17
C++面試常用問題:"引用"與指針的區別12-11