我碰巧问自己一个关于C++数组的问题。 那么,我们都知道数组是固定的东西集合,我说是固定的,因为在定义数组时需要声明数组的长度。 好吧,让我们考虑一个例子:处理数组大小
char myarray[10] = {'\0'};
int sz = sizeof(myarray); // It is supposed to be 10
嗯,这是正确的,10是返回的sizeof的数量。这可以由编译器完成,因为他知道它为该变量放置了多少空间。
现在考虑在这种情况下会发生什么:
void dosome(mystruct* arr) {
int elements = sizeof(arr)/sizeof(mystruct);
for (int i = 0; i < elements; i++) {
// Do something hoping no overflow will ever occur
}
}
尼斯......但我想这可能是溢出容易。如果我将这个函数传递给我以“正常”方式创建的数组,则一切都应该很好:
mystruct array[20];
dosome(array);
没问题。但是,如果我这样做:
mystruct* array = (mystruct*)malloc(80*sizeof(mystruct));
dosome(array);
发生什么??????????????????? 我想了解sizeof的行为,这个函数是在编译时评估的吗?好的,当我不使用数组时,会发生什么情况,但像那样的数据块非常麻烦?此外,我可以重新调用它,再次调用malloc,并要求再次处理该数据块。它会起作用吗? 我可以尝试一下身体,但是我会得到一些有关sizeof行为的确切答案。
谢谢。
在`dosome`,`的sizeof(ARR)`是`的sizeof(MYSTRUCT *)`不管如果你用C开发的功能被称为 – icecrime 2010-11-25 14:07:32
方式++,然后尽可能使用`new`而不是`malloc`。如果你像这样定义你的数组,你的代码仍然行为不端:`mystruct * array = new mystruct [20];`? – suszterpatt 2010-11-25 14:10:07
icecrime是对的,你有错误的期望 – Simone 2010-11-25 14:10:20