这句话是什么意思?
//allocated memory for Device info
(*PppsCoreStructure)->psDeviceDetails=(sDeviceDetails **)calloc(CORE_DEVICEINFO_SIZE, sizeof(sDeviceDetails*));
我知道'(* PppsCoreStructure) - > psDeviceDetails'是指向指针的指针。但我无法想象calloc如何返回指针指针?我是初学者,请帮忙
答案 0 :(得分:3)
对calloc
的此调用为CORE_DEVICEINFO_SIZE
个sDeviceDetails
个对象的calloc
指针分配了足够的空间。 calloc
返回一个可用于存储任何内容的简单内存缓冲区;在这种情况下,指针。
(请注意,依赖{{1}}返回填充空指针的缓冲区是不可移植的:它返回零填充缓冲区,但空指针不一定都是零。但它在普通平台上。)
答案 1 :(得分:3)
该函数分配一个指针数组。 CORE_DEVICEINFO_SIZE是此数组中的指针数。
(sDeviceDetails **)意味着编写代码的程序员不知道void-pointer如何在C语言中运行。演员表是多余的,应该删除。
答案 2 :(得分:1)
(*PppsCoreStructure)->psDeviceDetails
的声明类型为sDeviceDetails **
calloc()
的返回值属于void*
(sDeviceDetails **)calloc(...)
会将calloc
的返回值转换为sDeviceDetails **
类型的在C ++语言中,这种类型转换是必不可少的,尽管在C ++中通常不会使用calloc
并且可能会使用C ++转换。
在C语言中,不需要类型转换,因为void*
指针与所有其他指针类型兼容。
在评论中说明
但我想知道
的不同之处sDeviceDetails*
与sDeviceDetails**
我怀疑这实际上是你真正的问题。
答案很简单:T*
是指向T的指针,T**
是指向T的指针。