關於利用陣列名獲取陣列大小的一點誤區 - [C&CPP]
- 眾所周知,在C++中,當我們使用一個陣列引數作為一個函式的引數的時候,該陣列名將會退化為一個指標。
- 另,我們知道在C++中可以使用sizeof(a)獲取陣列a的大小(多少個位元組);
- 但常常我們在對一個從形參傳進來的陣列怎麼獲取長度了,還可以使用sizeof(a)嗎?答案是否定的。 因為經過了實參到形參的轉換,該陣列名已經退化為一個名副其實的指標了(作業系統將會重新生成一個新的區域性變數,該變數是一個指標,該指標指向了原陣列所在的記憶體)。此時我們已經無法通過該指標獲取到陣列的大小了。因此如果當我們在程式中將會使用到該陣列的大小(當我要遍歷該陣列的時候,需要判斷越界),我們應當使用形參來傳遞陣列的大小,而不是利用sizeof(a)來獲取陣列的大小;
下面我們來用程式來說明以上很饒舌的一段說明文字:
#include <iostream>
using namespace std;
int getSize(int data[]);
int main()
{
int data[] = {1,2,3,4,5,6,7};
cout<<"the address of data: "<<&data<<endl;
cout<<"the address of data[0]: "<<&data[0]<<endl;
cout<<"size: "<<getSize(data)<<endl;
return 1;
}
int getSize(int data[])
{
cout<<"the address of data pointer: "<<&data<<endl;
return sizeof(data)/sizeof(data[0]);
}
該程式執行結果如圖下所示:
the address of data: 0xbff918e4
the address of data[0]: 0xbff918e4
the address of data pointer: 0xbff918d0
size: 1
從上面的結果中我們可以得知,作業系統確實給我們重新分配了一個新的變數(指標data),我們通過sizeof(data)獲取到的是指標data的大小,所以最終獲得尺寸是1也是可以理解。
由此可見該程式並未達到我們想要的結果。亦即,如果我們想要在一個函式中獲取到一個陣列(該陣列是通過函式引數獲取的)的大小,惟有通過函式實參傳遞給形參。
例如:
int func(int data[],int n);
相關文章
- C++ 獲取陣列大小、多維陣列操作詳解C++陣列
- C語言中“陣列名”和“&陣列名”C語言陣列
- 二維陣列的獲取陣列
- JS陣列遍歷和獲取陣列最值JS陣列
- javascript如何獲取陣列的長度和遍歷陣列的每一項JavaScript陣列
- javascript擷取陣列的一個區間JavaScript陣列
- js如何獲取指定陣列元素在陣列中的索引值JS陣列索引
- PHP獲取陣列最後一個值PHP陣列
- JavaScript獲取陣列最後一個元素JavaScript陣列
- vue陣列操作遇到坑-關於陣列操作Vue陣列
- 關於在類陣列中使用陣列方法陣列
- 物件陣列與一般陣列的區別物件陣列
- C++獲取陣列的長度C++陣列
- 獲取剪下板有格式的陣列陣列
- C/C++ 讀入一個整型陣列,陣列大小未知C++陣列
- 陣列呼叫c#讀取陣列中獲取最大最小值方法陣列C#
- js獲取 陣列最大/小值JS陣列
- 【MATLAB】利用size()函式輸出陣列大小Matlab函式陣列
- 關於陣列去重陣列
- Java擷取指定區間內的陣列元素並存入新陣列Java陣列
- 獲取陣列第N個元素的方法陣列
- JavaScript獲取元素在陣列中的位置JavaScript陣列
- 獲取一個陣列裡面第K大的元素陣列
- JavaScript關於陣列的一些方法整理JavaScript陣列
- JavaScript 獲取陣列中最大值JavaScript陣列
- 陣列1——求一個陣列的最大子陣列陣列
- js如何獲取陣列中的最大值JS陣列
- vue 關於陣列和物件的更新Vue陣列物件
- 關於字典和陣列的疑問陣列
- JavaSE 陣列:一維陣列&二維陣列Java陣列
- JS 獲取陣列物件的值&提取Object的valueJS陣列物件Object
- 使用vuejs獲取兩個陣列id,如果某一個陣列id成功匹配另一個陣列內id,那麼就勾選VueJS陣列
- 關於位元組陣列QByteArray陣列
- c語言獲取陣列長度的函式C語言陣列函式
- 獲取陣列中子串乘積的最大值陣列
- thymeleaf關於js的一些坑(陣列定義)JS陣列
- 關於陣列的物件獲取及排序問題/小程式的多層頁面返回問題陣列物件排序
- 關於JS陣列中相同物件屬性值歸類方法的一點思考JS陣列物件