0

動的に割り当てられた構造体の配列 ( 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;  
}
4

0 に答える 0