[英]C++: Array and sizeof
給出的方向:編寫一個函數int getLength(int grid [] [6]),該函數計算二維數組中包含的元素數。
我的第一個問題是:如何將數組傳遞給函數? 嘗試這樣做時出現錯誤。
int x[][2] = {{ 1, 2 }, { 2, 3 }};
int getLength(x);
錯誤:“ int(*)[2]”類型的值不能用於初始化“ int”類型的實體
================================================ ==========
另外,這是否像使用sizeof()一樣簡單?
int getLength(int grid[][6]){
cout << sizeof(grid);
return sizeof(grid);
}
這不可能。 將數組傳遞給函數時,它會衰減為指針,而無法獲取數組大小。
您可以使用模板從數組類型中提取大小:
template <size_t N, size_t M>
size_t getLength(int (&)[N][M]) {return N*M;}
通過按引用傳遞數組,它保留其類型,可以從中自動推導模板參數以提供返回值。
如果您要傳遞二維數組以將getLength()
函數用作
int x[][2];
getLength(x);
函數聲明應為:
getLength(int x[][2]) { .. }
在上面的聲明中,不需要指定行數,因為我們沒有為數組分配內存,因此可以忽略。 數組的尺寸要求列數。
二維數組的大小可以計算為:
ROW * COL * sizeof x[0][0]
#include <iostream>
using namespace std;
int getLength(int x[][2]);
void main(){
int x[][2] = { { 1, 2 }, { 2, 3 } };
int y = getLength(x);
cout << y << endl;
}
int getLength(int x[][2]){
cout << sizeof(x) << endl;
for (int i = 0; i < 2; i++){
for (int j = 0; j < 2; j++)
cout << x[i][j]<<" ";
cout << endl;
}
return sizeof(x);
}
這個結果是
4
1 2
2 3
4
這不是您的興趣嗎?
如果您的任務是發送任意大小的2D數組以起作用,則只需發送指針和兩種大小即可。 但是,如果要通過此類功能測量大小,請小心sizeof(grid);
將計算指針4或8的大小(即32或64位,具體取決於您的系統),但不計算數組的大小。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.