c++ - 遍历数组时遇到的一基础问题?
PHP中文网
PHP中文网 2017-04-17 15:23:56
0
3
692
int a[] = {1, 2, 3, 4, 5};
for (int i = 0; i < sizeof(a) / sizeof(int); i++)
{

}

这里的a不是代表指针吗?为什么sizeof(a)得到的大小和指针的大小不一样?是因为这个是const指针吗?还是涉及到指针和数组名的本质区别?谢谢大家。

PHP中文网
PHP中文网

认证高级PHP讲师

全部回覆(3)
迷茫

陣列和指標是兩種類型。
陣列名稱可以隱式轉換為首元素的指標。
a的類型是int[5]sizeof(a)相當於sizeof(int[5])而不是sizeof(int *)

黄舟

數組指標和普通指標還是有區別的,畢竟在數組定義時,就能確定其元素類型和數量

只有當編譯器推斷不出是數組還是普通指標時,才會以普通指標的大小計算sizeof
例如函數聲明,void f(int* a),因為參數a什麼指標都有可能傳入,編譯器不可能推論出是不是數組
所以sizeof(a) = sizeof(int*)

但是你題目這種情況,編譯器能明明白白推斷出a就是一個5元整數數組,所以sizeof(a) = sizeof(int[5])

迷茫

簡單講本質區別:
變數名是對記憶體區域的命名,在運行時是沒有名字的,a和p僅在原始碼和編譯時有意義。
a命名的記憶體就是 int[5]型別的 有5個int的一塊記憶體。
p命名的就是具有 int 類型的 只有1個int指標的記憶體空間。
a[2]在編譯時就直接被翻譯成了 那塊記憶體空間的第3個單元。
p[2]翻譯成 p那個int*記憶體空間的值取出來,加上2 得到的記憶體位址那個記憶體空間。
int const p 只是限定p指向的那個只有1個int指標的記憶體空間不可變。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!