我有两个关于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;
}
答案 0 :(得分:4)
1.以上是否等同于以下内容?
#pageContent
如果是的话,这是意料之外的,因为吧++;移动双倍 指针向前而不是单指针,这与非指针不同 无效类型。
没关系,因为bar[i++] = foo;
是一个指针数组的指针。 bar
的大小是已知的(它是指针的大小),因此您知道void*
数组的下一个元素在哪里。
2.为什么可以从
void**
返回void**
?
因为void * foo();
是指向任何东西的指针。指向任何内容的指针是指向任何内容的指针,因此void*
可以隐式转换为void**
。