-3

我在正确显示数组大小时遇到​​问题。我知道数组大小是 256000,但是当我进入循环时它显示为 8。如果不使用动态分配,大小将准确显示。如何使用动态分配纠正错误?

4

1 回答 1

4

这会给你 10 的大小,因为编译器知道它是一个数组;

char foo[10];
int size = sizeof foo;

这将在 32 位架构上为您提供大小 4,因为它是指针的大小。

char *foo = malloc(10 * sizeof(char));
int size = sizeof foo;

在此之后,用法foo相同。您可以对这两个版本执行或任何foo[2]操作。*foo但是您可能不应该&foo使用第一个变体的地址。有时你应该free(foo);使用第二个。

永远记住:sizeof 不是一个函数,sizeof 总是在编译时决定的。

于 2013-09-18T06:40:33.893 回答