動的に割り当てられた構造体の配列 ( myStructArray
) があります。その中の要素の数を取得するために、私たちが知っているように (ハックではありますが)、sizeof(myStructArray)/sizeof(myStructArray[0]
期待どおりに機能する ( ) を実行します。
ただし、myStructArray
関数に渡すsizeof
と、その構造体配列パラメーター ( someStructArray
) に対して を実行すると、直接必要なもの、つまり配列要素の数が得られます。
どうして???
が参照渡しされていることはわかってmyStructArray
おり、検証と健全性のために、 のsomeStructArray
内部の要素を操作したbar()
ところ、 の内容がmyStructArray
変更されました。だから、これは私を悩ませています。
bar()
確かに、 ( sizeof(someStructArray)/sizeof(someStructArray[0])
) ハックを行わずに内部の配列要素の数を取得できるのは気に入っていますが、理由を理解しない限り、常にこの方法で解決されるとは思えません。ありがとう!
typedef struct {
int a;
int b;
} MyStruct;
...
.h file
class MyClass {
public:
static MyStruct myStructArray[];
};
.cpp file
MyClass::myStruct[] =
{{1,2}, {3,4}};
void MyClass::foo() {
sizeof(myStruct); // 16 (elements x size of element)
cout << myStruct[0].a; // 1
bar(myStruct);
cout << myStruct[0].a; // 17
}
...
void bar(MyStruct someStruct[]) {
sizeof(someStruct); // 2 (just elements??) why different???
someStruct[0].a = 17;
}