计划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);
有人知道上述程序代码中void
和void*
的行为吗?
答案 0 :(得分:2)
void
有两个用途:
作为函数声明的一部分,声明函数不返回任何内容,或者不带任何参数。
或者作为通用指针类型void*
,可用于转换为/从任何其他指向类型的指针,而无需显式转换。
void类型包含一组空值;这是不完整的 无法完成的对象类型。
这意味着您无法将变量定义为void
,也无法取消引用void*
。
6.3.2.2
中更清楚地说明了这一点6.3.2.2 void
void表达式的(不存在的)值(具有的表达式) type void)不得以任何方式使用,也不得使用隐式或显式 转换(无效除外)不适用于此类转换 表达。如果任何其他类型的表达式被评估为void 表达式,其值或指示符被丢弃。 (无效表达 评估其副作用。)
答案 1 :(得分:-1)
虚空*只是一个指向你不知道的东西的指针。 所以你可以初始化ist。即使void *也不是很有用,但它是一个指针,可以转换为特定类型的指针。
虚空变量是"你不知道的东西"因此它永远不会被初始化并且不能被声明。