为什么不可能有无数的数组?

时间:2018-06-17 08:18:48

标签: c arrays void

我正在经历geeksforgeeks并发现我们无法拥有一系列void和函数。因为我认为由于功能的可变大小而不允许使用函数数组(如果我错了,请纠正我)。

2 个答案:

答案 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 = ???

没有任何一件事你可以用???代替那些根本就没有意义的东西。