为什么sizeof C ++数组的结构在传递给它的函数中是不同的?

时间:2013-03-07 17:20:06

标签: c++ arrays struct sizeof

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

但是,当我将myStructArray传递给函数时,在该struct array参数(sizeof)上执行someStructArray会直接给出我想要的内容 - 数组元素的数量。

为什么???

我知道myStructArray正在通过引用传递,并且作为验证和理智,我在someStructArray内部操纵了bar()的元素,并且 做了 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;  
}

0 个答案:

没有答案