如果调用calloc成功,则返回指向内存中数组基类的void *类型的指针;
这里,如果指向类型为void *的指针指向内存中数组的基数,那么array [0]的类型为void ??
我想知道什么是......
谢谢大家阅读我的问题,希望得到答复!
答案 0 :(得分:5)
我可以看到,如果int *
指向int
,那么void *
应该指向void
是多么诱人。但事实并非如此。 void *
和void
之间确实没有用处,因此最好将它们视为单独的概念。
void *
表示指向未指定类型的对象的指针。如果你熟悉它,你可以把它想象成Java Object
的C类似物。
void *
具有以下属性:
任何指针类型都可以转换为void *
和从void *
转换,即void *
足以容纳任何指针,即使在指向不同类型的指针可能具有不同大小的机器上也是如此。
void *
与其他指针类型之间的转换是隐含的,您不必进行显式转换。
不允许取消引用void *
,即我们必须在访问它指向的内存之前将其强制转换为具体指针类型。
您无法对标准C中的void *
进行地址算术,但GCC允许您将其作为文档扩展名进行。
calloc()
是需要处理任意数据的函数的选择类型,例如action
。
答案 1 :(得分:3)
calloc
返回void*
,因为:
calloc
可用于为任何类型的对象分配内存。void*
可以隐式转换为其他指针类型。如果您使用:
void* ptr = calloc(...);
它有效,但您无法使用*ptr
。 void*
不可解除引用指针必须转换为其他类型才能解除引用。 E.g。
char* cptr = ptr;
*cptr = 'a';