假设“structName”是已定义的结构:
structName ** sarray = (structName **) malloc(0 * sizeof(structName *));
我知道它创建了一个指向名为sarray的结构指针的指针,但是为什么(structName**)放在表达式的开头呢?另外,为什么在malloc调用中结构大小乘以0?
代码的来源是here

最佳答案

malloc返回void *。指针类型为sarraystructName **是一个类型转换,将(structName **)转换为void *。指针在C语言中是非常有延展性的;structName **总是返回一些可以安全地转换为任何类型指针的内容。在本例中,您有一个指向malloc的指针。
structName *乘以sizeof(structName *)做你想做的事,要求0获得零长度的内存块。我怀疑malloc在里面,因为作者认为它是标准模式。您可以移除它而不产生任何后果,只需提供0。如果sizeofrealloc参数一起工作,您也可以将NULL初始化为sarray
作为记录,对于NULL
如果请求的空间大小为零,则行为为
实现定义的:返回一个空指针,或者
行为就像大小是一些非零值,除了
返回的指针不能用于访问对象。
因此,初始调用可能返回也可能不返回malloc,返回的结果基本相同:通过指针访问任何内容都应具有未定义的结果。

09-30 23:53