2017-07-18 4 views
0

私は、配列のすべての要素を渡って実行するループを記述しようとしています。私は概念hereを学んだ。私はその実行のいくつかの困難に直面しています。私はデバッグしようとしており、そのデバッグプロセスの一部として以下の関数を書いています。以下は、私のコードです:sizeof()のdouble配列[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

をバイト数。 –

+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

コンパイラからのエラーメッセージは、長い道のりに行くことができます:4であるように思われ、あなたが「ポインタ」(配列のための誤った名称が、ほとんど同じもの)のサイズを測定している

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]) { 
関連する問題