混淆C中变量的范围 code 1 #包括 int T; int main() { 结构T{double x;}; printf(“%d”,sizeof(T)); 返回0; }
产出:4混淆C中变量的范围 code 1 #包括 int T; int main() { 结构T{double x;}; printf(“%d”,sizeof(T)); 返回0; },c,struct,scope,global-variables,sizeof,C,Struct,Scope,Global Variables,Sizeof,产出:4 代码2 #包括 结构T{double x;}; int main() { int T; printf(“%d”,sizeof(T)); 返回0; } 产出:4 对于code 1,我认为输出是全局变量(int T)的大小,这就是它给出4的原因 但是对于code 2,它给出了输出4,根据全局变量逻辑,struct{double x;}的输出应该是8 在这里,我认为全局变量的概念是不正确的 有人能解释一下为什么输出看起来像这样吗?这里的问题不是范围,而是结构标记如何位于与其他符号不同的名称
代码2
#包括
结构T{double x;};
int main()
{
int T;
printf(“%d”,sizeof(T));
返回0;
}
产出:4
对于code 1
,我认为输出是全局变量(int T
)的大小,这就是它给出4的原因
但是对于code 2
,它给出了输出4,根据全局变量逻辑,struct{double x;}的输出应该是8代码>
在这里,我认为全局变量的概念是不正确的
有人能解释一下为什么输出看起来像这样吗?这里的问题不是范围,而是结构标记如何位于与其他符号不同的名称空间中
因此,当执行sizeof(T)
时,总是会得到变量T
要获得C中的结构标记,需要struct
关键字。如sizeof(struct T)
所示
如果使用typedef
,情况会有所不同:
Code 2
#include <stdio.h>
struct T{ double x;};
int main()
{
int T;
printf("%d", sizeof(T));
return 0;
}
然后在“normal”名称空间中有一个名为T
的类型。另一方面,该类型会与同名的变量冲突,因此会出现编译器错误。这里的问题不是范围,而是结构标记如何与其他符号位于不同的命名空间中
因此,当执行sizeof(T)
时,总是会得到变量T
要获得C中的结构标记,需要struct
关键字。如sizeof(struct T)
所示
如果使用typedef
,情况会有所不同:
Code 2
#include <stdio.h>
struct T{ double x;};
int main()
{
int T;
printf("%d", sizeof(T));
return 0;
}
然后在“normal”名称空间中有一个名为T
的类型。另一方面,该类型将与具有相同名称的变量冲突,因此会出现编译器错误。对于T
的typedef,不会出现编译器错误。这两个名称将在不同(嵌套)范围内;内部名称将是printf()
语句中使用的名称(使用sizeof
运算符)。如果使用T
的typedef,则不会出现编译器错误。这两个名称将在不同(嵌套)范围内;内部名称将是printf()
语句中使用的名称(使用sizeof
运算符)。
struct T
{
double x;
} T;