劍指offer-數據結構:數組和指針(基礎知識)

數據結構一直是技術面試的重點,大多數面試題都是圍繞着數組、字符串、鏈表、樹、棧以及隊列這幾種常見的數據結構展開的。

數組和字符串是兩種最基本的數據結構,用連續內存分別存儲數字和字符。

在C/C++中,數組和指針是相互關聯又有區別的兩個概念。當我們聲明一個數組時,其數組的名字也是一個指針,該指針指向數組的第一個元素。我們可以用一個指針來訪問數組。值得注意的是,C/C++沒有記錄數組的大小,因此用指針訪問數組中的元素時,程序員要確保沒有超出數組的邊界。通過小例子來了解數組和指針的區別。

#include<iostream>

using namespace std;

int GetSize( int data[] )
{
    return sizeof( data );
}

int main()
{
    int data1[] = { 1,2,3,4,5 };
    int size1 = sizeof( data1 );

    int *data2 = data1;
    int size2 = sizeof( data2 );

    int size3 = GetSize( data1 );

    cout << size1 <<"   " << size2 << "   " << size3 << endl;
    return 0;
}

在64位機上輸出的是 20 8 8.

data1 是一個數組,sizeof(data1)求數組的大小,數組包含5個整數每個整數佔4個字節,因此總共是20個字節。

data2 聲明爲指針。在 32 位上,對任意指針求 sizeof 結果是 4, 64 位上是8 。

在C/C++中,當數組作爲函數的參數進行傳遞時,數組就會自動退化爲同類型的指針。因此,儘管函數GetSize的參數data被聲明爲數組,但它會退化爲指針,sizeof的結果仍爲8

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