3

所以我试图在 C 中创建一个动态数组,使用 malloc,但由于某种原因它没有成功。这是我的代码:

    int* test = (int*) malloc(20 * sizeof(int));
    printf("Size: %d\n", sizeof(test));

当我运行此代码时,控制台输出 8,尽管我相信它理想情况下应该输出 80,因为 int 的大小是 4,而我正在创建其中的 20 个。那么为什么这不起作用呢?谢谢你的帮助。:)

4

3 回答 3

8

sizeof运算符返回一个 的大小,int*它只是一个指针。在 C 中,当您使用 动态分配内存时malloc,调用malloc返回一个指向新分配的内存块的指针(通常在堆上)。指针本身只是一个内存地址(通常只占用 4 或 8 个字节在大多数情况下)现代系统)。您需要跟踪自己分配的实际字节数。

C 语言只会跟踪静态分配的缓冲区(堆栈数组)的缓冲区大小,因为数组的大小在编译时可用。

int test[100];
printf("Sizeof %d\n", sizeof(test))

这将打印一个等于100 * sizeof(int)(在大多数现代机器上通常为 400)的值

于 2013-05-29T00:00:34.427 回答
3

这里sizeof运算符为您提供存储 ie 所需的字节数,int*
它相当于sizeof(int*);
取决于它可能给您的编译器48

在 C 中,其程序员的工作是跟踪动态分配的字节数。

于 2013-05-29T01:41:21.863 回答
0

如果您尝试打印 sizeof (&test) 的值,您将得到 80 (20 * 4)。&test 是 int (*) [20] 类型。

我希望它能澄清你的疑问。

于 2013-05-29T06:31:36.263 回答