gpt4 book ai didi

c - void/void * 声明行为

转载 作者:行者123 更新时间:2023-11-30 21:25:46 26 4
gpt4 key购买 nike

程序 1:

int main()
{
void v=8;
printf("v=%d\n",v);
}

程序2:

int main()
{
void *v=8;
printf("*v=%u\n",*v);
printf("v=%u\n",v);
}

程序1编译错误:

**error**: variable or field ‘v’ declared void void v=0;

程序 2 出现编译错误:

**error**:invalid use of void expression printf("%d\n",*v);

有人知道上述程序代码中voidvoid*的行为吗?

最佳答案

void 有两种用途:

  • 作为函数声明的一部分,声明函数不返回任何内容,或者不接受任何参数。

  • 或者作为通用指针类型 void*,它可用于在任何其他类型指针之间进行转换,无需显式强制转换。

C11 6.2.5/19 规定:

The void type comprises an empty set of values; it is an incomplete object type that cannot be completed.

这意味着您不能将变量定义为 void 也不能取消引用 void*

这在 6.3.2.2 中有更清楚的说明

6.3.2.2 void

The (nonexistent) value of a void expression (an expression that has type void) shall not be used in any way, and implicit or explicit conversions (except to void) shall not be applied to such an expression. If an expression of any other type is evaluated as a void expression, its value or designator is discarded. (A void expression is evaluated for its side effects.)

关于c - void/void * 声明行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27012047/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com