为了账号安全,请及时绑定邮箱和手机立即绑定

空隙的大小是多少?

/ 猿问

空隙的大小是多少?

C++ C
眼眸繁星 2019-11-14 14:39:26

这句话会产生什么?


void *p = malloc(sizeof(void));

编辑:问题的扩展。


如果sizeof(void)在GCC编译器中产生1,则分配1字节的内存,指针p指向该字节,p ++会增加到0x2346吗?假设p为0x2345。我说的是p,而不是* p。


查看完整描述

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


查看完整回答
反对 2019-11-14
?
胡说叔叔

如果使用的是GCC,并且没有使用删除编译器特定扩展的编译标志,sizeof(void)则为1。GCC具有执行此操作的非标准扩展。


通常,void它是不完整的类型,您不能将sizeof用于不完整的类型。


查看完整回答
反对 2019-11-14

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信