c - 为什么允许指向不完整类型的指针而不是不完整类型的变量?

标签 c typedef forward-declaration

为什么以下是合法的:

typedef struct a aType;
struct a
{
   int x;
   aType *b;
};

以及以下非法内容:

void main()
{
    typedef struct a aType;
    aType someVariable;
    struct a
    {
      int x;
      aType *b;
    };
}

我很好奇,因为在每种情况下它都是前向引用,据我所知,至少对于函数和变量,前向引用是不合法的。

此外,C++ 的答案是否也相同?

最佳答案

您可以创建指向不完整类型的指针,因为指针对象的大小不依赖于所指向类型的大小。指向不同 struct 类型的指针具有相同的大小和表示形式,无论 struct 类型本身的大小如何。

您不能创建不完整类型的实例,因为类型的大小未知。

关于c - 为什么允许指向不完整类型的指针而不是不完整类型的变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41751479/

相关文章:

c++ - 为什么我应该在 C++ 中使用 typedef?

sml - 在标准 ML 中声明相互依赖的值和函数

c++ - 尝试转发声明时 '->' 是什么意思?

c - 二进制数转 MLT-3

c - typedef 的重新定义

c - 如何允许用户输入具有指定初始大小的数组的值?

c - typedef 重定义如何在 C11 中工作?

c++ - 管理前向声明

c++ - 计算文件中每个字母的出现次数?

c++ - 为什么在重新分配失败后无法访问先前分配的内存?