我有一个动态分配的结构数组(myStructArray
)。为了获得其中的元素数量,正如我们所知(即使是 hack),我做了一个 ( sizeof(myStructArray)/sizeof(myStructArray[0]
) ,它按预期工作。
但是,当我传入myStructArray
一个函数时,sizeof
对该结构数组参数 ( someStructArray
) 执行该操作会直接得到我想要的 - 数组元素的数量。
为什么???
我知道myStructArray
是通过引用传递的,并且作为验证和理智,我操纵了someStructArray
inside 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;
}