关于void指针的问题

时间:2015-07-08 21:28:07

标签: c syntax void-pointers

我有两个关于void指针的问题;我们有:

void * foo=malloc(99) 
void **bar=(void**)malloc(99);

int i=1;
bar++;
*bar = foo;

1.以上是否等同于以下内容?

bar[i++] = foo;

如果是,则意外,因为bar++;向前移动双指针而不是单指针,这与非空类型不同。

2.为什么可以从void**返回void * foo();

例如:

 void * foo(){
     void ** bar;
     return bar;
 }

1 个答案:

答案 0 :(得分:4)

  

1.以上是否等同于以下内容?

#pageContent
     

如果是的话,这是意料之外的,因为吧++;移动双倍   指针向前而不是单指针,这与非指针不同   无效类型。

没关系,因为bar[i++] = foo; 是一个指针数组的指针。 bar的大小是已知的(它是指针的大小),因此您知道void*数组的下一个元素在哪里。

  

2.为什么可以从void**返回void**

因为void * foo();是指向任何东西的指针。指向任何内容的指针是指向任何内容的指针,因此void*可以隐式转换为void**