C语言:为什么动态分配的对象返回指针,静态分配的对象为您提供选择?

Dar*_*lar 5 c malloc

这实际上是一个比我在这里问过(任何谁在乎)一个更简洁,更清晰的问题:C语言中:为什么malloc()函数返回一个指针,而不是价值?(对不起那些最初认为我是垃圾邮件的人...我希望它不会被解释为同一个问题,因为我认为我在那里的措辞使得它无意中误导了)

- >基本上我要问的是:为什么C程序员需要一个指向动态分配的变量/对象的指针?(无论变量/对象之间有什么区别......)

如果C程序员可以选择只创建'int x'或者只是'int*x'(两者都是静态分配的),那么为什么他也不能选择JUST将其动态分配的变量/对象初始化为变量(并且不通过malloc()返回指针)?

*如果有一些模糊的方法来做我上面解释的那么,那么,为什么malloc()似乎是大多数教科书关于动态分配的方式?

Eti*_*tel 9

注意:在下面,byte指的是sizeof(char)

好吧,对于一个,malloc返回一个void *.它根本无法返回一个值:C缺乏泛型,这是不可行的.在C中,编译器必须在编译时知道每个对象的大小; 由于分配的内存大小在运行时才会知道,因此必须返回可以表示任何值的类型.既然void *可以代表任何指针,那么它是最好的选择.

malloc也无法初始化块:它不知道正在分配什么.这与C++相反,C++ operator new同时执行分配和初始化,以及类型安全(它仍然返回指针而不是引用,可能是出于历史原因).

此外,malloc分配一个特定大小的内存块,然后返回指向该内存的指针(这就是代码malloc:内存分配).你得到一个指针,因为这就是你得到的:一个原始记忆的单元化块.比方说,当你这样做时,malloc(sizeof(int))你不是在创建一个int,而是分配sizeof(int)字节并获取这些字节的地址.然后,您可以决定将该块用作int,但您也可以在技术上将其用作sizeof(int) chars 的数组.

各种替代方法(calloc,realloc)的工作方式大致相同(calloc在处理数组时更容易使用,并且数据为零填充,而realloc在需要调整内存块时非常有用).