这句话会产生什么?void *p = malloc(sizeof(void));编辑:问题的扩展。如果sizeof(void)在GCC编译器中产生1,则分配1字节的内存,指针p指向该字节,p ++会增加到0x2346吗?假设p为0x2345。我说的是p,而不是* p。
3 回答
交互式爱情
TA贡献1712条经验 获得超3个赞
类型void没有大小;那将是一个编译错误。出于同样的原因,您不能执行以下操作:
void n;
编辑。令我惊讶的是,sizeof(void)实际上在GNU C中确实可以编译:
$ echo 'int main() { printf("%d", sizeof(void)); }' | gcc -xc -w - && ./a.out
1
但是,在C ++中,它不会:
$ echo 'int main() { printf("%d", sizeof(void)); }' | gcc -xc++ -w - && ./a.out
<stdin>: In function 'int main()':
<stdin>:1: error: invalid application of 'sizeof' to a void type
<stdin>:1: error: 'printf' was not declared in this scope
胡说叔叔
TA贡献1804条经验 获得超8个赞
如果使用的是GCC,并且没有使用删除编译器特定扩展的编译标志,sizeof(void)则为1。GCC具有执行此操作的非标准扩展。
通常,void它是不完整的类型,您不能将sizeof用于不完整的类型。
- 3 回答
- 0 关注
- 581 浏览
添加回答
举报
0/150
提交
取消