在C中的变量范围混淆


Code 1
#include <stdio.h>
int T;
int main()
{
   struct T{ double x;};
   printf("%d", sizeof(T));
   return 0;
}

输出:4

Code 2
#include <stdio.h>
struct T{ double x;};
int main()
{
   int T;
   printf("%d", sizeof(T));
   return 0;
}

输出:4

对于code 1,我认为输出是全局变量(int T)的大小,这就是它给出4。

的原因。

但对于code 2,它给出了输出4,根据全局变量逻辑,应为struct T{ double x;};输出8。

在这里,全局变量概念不正确 - 我认为。

任何人都可以解释一下为什么输出看起来像?

这里的问题不是范围,而是与其他符号不同的名称空间中的结构标签。

因为这样做sizeof(T)时,您始终获取变量T

要在C中获得一个结构标签,您需要struct关键字。如sizeof(struct T)


如果您使用typedef

,情况会有所不同
struct T
{
    double x;
} T;

然后,您将在"正常"名称空间中拥有一个名为T的类型。另一方面,该类型将与变量相同的名称冲突,因此您将获得编译器错误。

相关内容

  • 没有找到相关文章