簡體   English   中英

C ++:數組和sizeof

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM