劍指offer——數組名與指針的區別

      在C/C++中,數組與指針相互關聯又有區別的兩個概念。當我們聲明一個數組時,其數組名字也是一個指針,該指針指向數組的第一個元素。我們可以用一個指針來訪問數組。但需要注意的是,C/C++沒有記錄了數組的大小(指的是C/C++中的指針變量沒有記錄數組的大小),因此用指針來訪問數組的元素時,我們要確保沒有超出數組的邊界。

咋們舉個栗子

#include <iostream>
using namespace std;

void getSize(int p[])
{
    cout << sizeof(p) << endl;
}

int main()
{
    int array[4] = { 0 };

    int * p = array;

    cout << sizeof(array) << endl;
    cout << sizeof(p) << endl;
    getSize(array);

    return 0;
}

程序輸出結果
這裏寫圖片描述

      a是一個數組,sizeof(array)是求數組的大小。這個數組包含4個整數,每個整數佔4字節,因此總共佔20字節。p聲明爲指針,儘管它指向數組array的第一個數組,但它的本質任然是一個指針。在32位系統上,對任意指針就sizeof得到的結果都是4.在C/C++中,當數組作爲函數的參數進行傳遞時,數組就自動退化爲同類型的指針,因此儘管函數getSize的參數被聲明爲數組,但它會退化爲指針,所以sizeof的結果仍然時4。

——摘自《劍指offer》

補充一下:
相同點:
1、都可以隨機訪問指定索引的元素
不同點:
1、數組名不可以加減運算,指針可以,如int * p;可以進行p++等操作。

恕當前知識程度還不夠,歡迎指正。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章