关于void指针的问题
Questions about void pointers
我有两个关于空指针的问题;我们有:
void * foo=malloc(99)
void **bar=(void**)malloc(99);
int i=1;
bar++;
*bar = foo;
1.Is上面相当于下面的?
bar[i++] = foo;
如果是,那是意外的,因为bar++;
向前移动双指针而不是单指针,这与非空类型不同。
2.Why 从 void * foo();
到 return void**
可以吗?
例如:
void * foo(){
void ** bar;
return bar;
}
1.Is the above equivalent to the following?
bar[i++] = foo;
If yes it's unexpected because bar++; moves the double
pointer forward and not single pointer, which is different from non
void types.
很好,因为 bar
是指向指针数组的指针。 void*
的大小是已知的(它是指针的大小),因此您知道 void**
数组的下一个元素在哪里。
2.Why is it fine to return void**
from a void * foo();
?
因为void*
是指向任何东西的指针。指向任何东西的指针就是指向任何东西的指针,所以 void**
可以隐式转换为 void*
.
我有两个关于空指针的问题;我们有:
void * foo=malloc(99)
void **bar=(void**)malloc(99);
int i=1;
bar++;
*bar = foo;
1.Is上面相当于下面的?
bar[i++] = foo;
如果是,那是意外的,因为bar++;
向前移动双指针而不是单指针,这与非空类型不同。
2.Why 从 void * foo();
到 return void**
可以吗?
例如:
void * foo(){
void ** bar;
return bar;
}
1.Is the above equivalent to the following?
bar[i++] = foo;
If yes it's unexpected because bar++; moves the double pointer forward and not single pointer, which is different from non void types.
很好,因为 bar
是指向指针数组的指针。 void*
的大小是已知的(它是指针的大小),因此您知道 void**
数组的下一个元素在哪里。
2.Why is it fine to return
void**
from avoid * foo();
?
因为void*
是指向任何东西的指针。指向任何东西的指针就是指向任何东西的指针,所以 void**
可以隐式转换为 void*
.