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