[基礎知識]6.陣列與指標的區別
阿新 • • 發佈:2019-01-09
下面程式碼的執行結果是?
int GetSize(int data[]){
return sizeof(data);
}
int _tmain(int argc, _TCHAR* argv[])
{
int data1[] = {1,2,3,4,5};
int size1 = sizeof(data1);
int* data2 = data1;
int size2 = sizeof(data2);
int size3 = GetSize(data1);
printf("%d, %d, %d",size1, size2, size3);
}
- 分析
data1是一個數組,sizeof(data1)是求陣列的大小。這個陣列包含5個整數,每個整數佔4位元組,因此總共佔用20位元組。data2宣告為指標,儘管它指向了陣列data1的第一個數字,但它的本質仍然是一個指標。在32位系統上,對任意指標求sizeof,得到的結果都是4。在C/C++中,當陣列作為函式的引數進行傳遞時,陣列就自動退化為同類型的指標
相關知識點:
除了以下三種情況外,在使用陣列時,陣列都會自動轉換為指向第一個元素的指標:
情況1:陣列用作取地址操作符&的運算元
情況2:陣列用作sizeof操作符的運算元
情況3:用陣列對陣列的引用進行初始化
int main()
{
char a[] = {'1', '3', '5', '7', '9'};
char (&b)[5] = a;
cout << sizeof(a) << endl;
cout << sizeof(*a) << endl;
cout << sizeof(&a) << endl;
cout << sizeof(a[0]) << endl;
cout << sizeof(&a[0]) << endl;
cout << *((char*)(&a + 1) - 1) << endl;
cout << sizeof(b) << endl;
cout << sizeof(*b) << endl;
cout << sizeof(&b) << endl;
cout << sizeof(b[0]) << endl;
cout << sizeof(&b[0]) << endl;
return 0;
}
答案:5 1 4 1 4 9 5 1 4 1 4