【发布时间】:2014-06-09 14:26:07
【问题描述】:
在 C 中,数组变量可以用作标量。例如:
char A[5];
if(A) printf("True\n");
将打印 True。鉴于:
struct S { int i; } s;
if(s) printf("True\n");
实际上会编译失败,报错:
错误:使用了需要标量的结构类型值
这是为什么?
为什么数组变量可以用作指针而不是结构体 变量?
谢谢。
编辑:也许这是改写问题的更好方法 为什么 C 赋予 A(标量)含义而不赋予 S?
编辑:我的问题本质上更具哲学性。我试图理解为什么 C 是这样设计的。为什么数组会像指针一样起作用,而结构却不会。它们都代表连续的内存块。那个记忆的结构是不同的,但为什么这很重要。
我对编译失败的原因不感兴趣,我理解(我证明它不是我)。
【问题讨论】:
-
if(S)在您的示例中没有任何意义,这是语法错误。过去的任何讨论都是毫无意义的。 -
@self 但是为什么它没有任何意义。为什么 C 赋予 A 意义而不赋予 S 意义?
-
@captaincurrie 出于同样的原因,
ch ar没有任何意义,而char有。 -
@chux
S不是结构,struct S是。我在示例中没有看到任何 typedef。 -
@captaincurrie 询问
if(s) printf("True\n");(小写s)不是更有意义吗?
标签: c arrays pointers structure