0

我有一个动态分配的结构数组(myStructArray)。为了获得其中的元素数量,正如我们所知(即使是 hack),我做了一个 ( sizeof(myStructArray)/sizeof(myStructArray[0]) ,它按预期工作。

但是,当我传入myStructArray一个函数时,sizeof对该结构数组参数 ( someStructArray) 执行该操作会直接得到我想要的 - 数组元素的数量。

为什么???

我知道myStructArray是通过引用传递的,并且作为验证和理智,我操纵了someStructArrayinside of的元素,bar()确实改变了myStructArray. 所以,这个问题困扰着我。

当然,我喜欢我可以在bar()不进行 ( sizeof(someStructArray)/sizeof(someStructArray[0])) hack 的情况下获得内部数组元素的数量,但除非我明白为什么,否则我不会感到舒服/自信,它总是会以这种方式解决。谢谢!

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