2017-07-18 68 views
0

我想寫一個循環遍歷數組中的所有元素。我學到了概念here。我在執行方面遇到一些困難。我一直在嘗試調試,並且已經將下列函數編寫爲該調試過程的一部分。以下是我的代碼:爲什麼sizeof()我的雙數組[4]只有4?

#include <iostream> 
using namespace std; 

struct Vmul { 
    double c[4][4]; 
}; 
double Vmulti(double a[4], double d[4]) { 
    cout << sizeof(a) << endl; 
    cout << sizeof(a[0]) << endl; 
    cout << sizeof(a)/ sizeof(a[0]) << endl; 
    return 0; 
} 
int main() 
{ 
    double r[4] = { 1,2,3,4 }; 
    double q[4] = { 1,2,3,4 }; 
    Vmulti(r, q); 
    return 0; 
} 

輸出:

4 
8 
0 
Press any key to continue . . . 

我無法找出原因的sizeof(A)僅返回4?不應該是8 * 4嗎?爲什麼不是sizeof給我的大小,而是給我數組中的元素的數量?

+4

你測量「指針」的大小(用詞不當數組,但幾乎同樣的事情),這似乎是4字節在您的機器上。 –

+1

查看https://stackoverflow.com/questions/1328223/when-a-function-has-a-specific-size-array-parameter-why-is-it-replaced-with-ap – YYC

+1

您使用'cout'和'<<'提示我,這不是一個C問題。 C和C++不是同一種語言。 –

回答

6

從編譯器的錯誤信息可以走很長的路要走:

test.cpp:8:23: warning: sizeof on array function parameter will return size of 'double *' instead of 'double [4]' 
     [-Wsizeof-array-argument] 
     cout << sizeof(a) << endl; 
        ^
test.cpp:7:22: note: declared here 
double Vmulti(double a[4], double d[4]) { 
相關問題