我正在经历geeksforgeeks并发现我们无法拥有一系列void和函数。因为我认为由于功能的可变大小而不允许使用函数数组(如果我错了,请纠正我)。
答案 0 :(得分:5)
功能根本没有大小;功能不是数据。你不能拥有一个单一的功能变量"无论是。这就是为什么你不能拥有一系列功能的原因。
同样地,你不能拥有一个void数组,因为你不能拥有一个void类型的单个元素:
void x; // what would this do?
(正式这是一个错误,因为void
是一个不完整的类型(并且无法完成)。)
void
有几个不同的用途(所有这些都属于&#34的总体范围;不是真正的类型"):
作为返回类型:void foo(...);
这表示该函数根本没有返回值。
作为参数列表的唯一元素:T foo(void);
这表明该函数不带参数。从逻辑上讲,你期望它的语法是T foo();
(一个空的参数列表),但是在预标准C中已经有了不同的含义,它没有函数原型。 T foo(void)
有点像语法骇客。同样,void
标志着缺少值。
(C ++简化的东西。在C ++中T foo();
与T foo(void);
的含义相同:foo
不带参数。)
作为通用指针类型:void *ptr;
这意味着ptr
是指向某种数据的指针,但我们不知道它是什么。这是语言规则中的一个特例。它与其他指针类型不同,因为
*ptr
中所示)是一个错误,因为您的值不能为void
} 我们可以隐式地将其他(数据)指针类型转换为void *
:
int i = 42;
void *ptr;
ptr = &i; // 'int *' -> 'void *'
我们可以隐式地将void *
转换为其他(数据)指针类型:
void *ptr = ...;
int *pi;
pi = ptr; // 'void *' -> 'int *'
因此,void *
被用作指向未知类型值的通用"指示符#34;。
答案 1 :(得分:0)
您不能拥有void
类型的变量(或void
数组),原因很简单,因为它没有类型void
的值来保存。< / p>
如果你写了
void v;
然后
v = ???
没有任何一件事你可以用???
代替那些根本就没有意义的东西。