簡體   English   中英

數組和sizeof麻煩編譯錯誤C ++

[英]Array and sizeof troubles compiling errors C++

我正在寫一個基於數組的代碼,在編譯失敗后引發了一些令人困惑的錯誤。 我已經在互聯網上搜索了一些或多或少理解的示例代碼,但是對我自己的代碼/思考過程中的錯誤識別很有幫助。

當前的任務是創建一個函數,該函數接受未知數量的整數數組並求和該數組中的偶數。 有人告訴我數組的最后一個條目是-1,但我認為此信息沒有用。

這是我的代碼:

#include <iostream>
using namespace std;

int sumEven(int myArray[])
{
int len = (sizeof(myArray) / sizeof(myArray[0]));
int i = 0;
int count = 0;

while (i < len)
{
    if (myArray[i] % 2 == 0)
    {
    count = count + myArray[i];
    }
    i++;    
}

return count;
}

我嘗試將len定義為數組元素的數量。 我認為這行不通,因為有一個錯誤涉及以下行:

prog.cpp:13:18: error: sizeof on array function parameter will return size of 'int *' instead of 'int []' [-Werror,-Wsizeof-array-argument]
int len = (sizeof(myArray) / sizeof(myArray[0]));
                 ^
prog.cpp:11:17: note: declared here
int sumEven(int myArray[])
                ^
1 error generated.

我有Matlab,Mathematica和Python的經驗,因此我的C ++格式可能很奇怪。 謝謝參觀。

問題是當數組作為參數傳遞給函數時,數組會衰減為指向第一個元素的指針 ,因此函數

int sumEven(int myArray[]) { ... }

實際上等於

int sumEven(int *myArray) { ... }

獲取指針的大小將返回指針的大小,而不是其指向的大小。

如果您需要知道函數的大小,則應將元素數量作為參數傳遞:

int sumEven(int *myArray, size_t len) { ... }

將數組傳遞給函數時,它們會衰減到指針 這意味着有關陣列大小的信息會丟失。

這意味着(sizeof(myArray) / sizeof(myArray[0]))在這種情況下將無法執行您想要的操作,因為此處myArray是一個指針。

規范的解決方案是添加另一個表示數組大小的參數,然后改用該參數。 這是C語言中使用的方法。

但是,在C ++中,除非您有特定的理由堅持使用數組,否則數組應該使用std:: vector ,而數組通常很容易出錯。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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