calloc类型转换为指针指针

时间:2011-11-15 12:39:09

标签: c

这句话是什么意思?

//allocated memory for Device info

(*PppsCoreStructure)->psDeviceDetails=(sDeviceDetails **)calloc(CORE_DEVICEINFO_SIZE, sizeof(sDeviceDetails*));

我知道'(* PppsCoreStructure) - > psDeviceDetails'是指向指针的指针。但我无法想象calloc如何返回指针指针?我是初学者,请帮忙

3 个答案:

答案 0 :(得分:3)

calloc的此调用为CORE_DEVICEINFO_SIZEsDeviceDetails个对象的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的指针。