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