數據結構一直是技術面試的重點,大多數面試題都是圍繞着數組、字符串、鏈表、樹、棧以及隊列這幾種常見的數據結構展開的。
數組和字符串是兩種最基本的數據結構,用連續內存分別存儲數字和字符。
在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