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