【问题标题】:Confusing about the scope of the variables in C对C中变量的范围感到困惑
【发布时间】:2017-07-13 09:47:57
【问题描述】:
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。

这里,全局变量的概念是不正确的——我认为。

谁能解释一下为什么输出看起来像这样?

【问题讨论】:

    标签: c struct scope global-variables sizeof


    【解决方案1】:

    这里的问题不在于范围,而是结构标签如何与其他符号存在于不同的命名空间中。

    因此,当您执行sizeof(T) 时,您总是会得到变量T

    要在 C 中获取结构标记,您需要 struct 关键字。如sizeof(struct T)


    如果你使用typedef,情况会有所不同:

    struct T
    {
        double x;
    } T;
    

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

    【讨论】:

    • 使用T 的typedef,不会出现编译器错误。这两个名称将在不同的(嵌套)范围内;内部名称将是 printf() 语句中使用的名称(使用 sizeof 运算符)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-08
    • 2017-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-27
    相关资源
    最近更新 更多