所以我正在尝试使用malloc在C中创建一个动态数组,但由于某种原因它没有用完。这是我的代码:
int* test = (int*) malloc(20 * sizeof(int));
printf("Size: %d\n", sizeof(test));
当我运行此代码时,控制台输出8,尽管理想情况下它应该输出80,我相信,因为int的大小是4,而我正在创建其中的20个。那么为什么这不起作用呢?谢谢你的帮助。 :)
答案 0 :(得分:8)
sizeof
运算符返回int*
的大小,它只是一个指针。在C中,当您使用malloc
动态分配内存时,对malloc
的调用会返回指向新分配的内存块的指针(通常在堆上)。指针本身只是一个内存地址(通常在大多数现代系统中只占用4或8个字节。您需要跟踪自己分配的实际字节数。
C语言只跟踪静态分配的缓冲区(堆栈数组)的缓冲区大小,因为数组的大小在编译时可用。
int test[100];
printf("Sizeof %d\n", sizeof(test))
这将打印一个等于100 * sizeof(int)
的值(在大多数现代机器上通常为400)
答案 1 :(得分:3)
此处sizeof
运算符为您提供存储int*
所需的字节数
即相当于sizeof(int*);
根据编译器的不同,它可能会为您提供4
或8
在C中,程序员可以跟踪动态分配的字节数。
答案 2 :(得分:0)
如果您尝试打印sizeof(& test)的值,您将得到80(20 * 4)。 & test的类型为int(*)[20]。
我希望它能澄清你的怀疑。