C.中数组的动态内存分配



所以我试图使用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*);
根据编译器的不同,它可能会为您提供48

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

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

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

相关内容

  • 没有找到相关文章

最新更新