C “什么是”呢;表达式的语法;
我正在阅读由K&R编写的C编程语言,我被一条关于声明的语句卡住了: 变量声明的语法模仿变量可能出现的表达式的语法 这是我从上述声明中了解到的: 当我们声明一个变量(例如C “什么是”呢;表达式的语法;,c,C,我正在阅读由K&R编写的C编程语言,我被一条关于声明的语句卡住了: 变量声明的语法模仿变量可能出现的表达式的语法 这是我从上述声明中了解到的: 当我们声明一个变量(例如int a)时,这意味着当在表达式中使用该标识符(a)时,它将返回指定类型的值(int) 我说得对吗?表达式的语法到底是什么意思?让我们看几个例子 与 您可以在表达式中使用*A,它的类型为int,因此A必须是指向int的指针 与 您可以在表达式中使用A[i],它的类型为int,因此A必须是int的数组 但您可以构造更复杂的声明:
int a
)时,这意味着当在表达式中使用该标识符(a
)时,它将返回指定类型的值(int
)
我说得对吗?表达式的语法到底是什么意思?让我们看几个例子 与 您可以在表达式中使用
*A
,它的类型为int
,因此A
必须是指向int
的指针
与
您可以在表达式中使用A[i]
,它的类型为int
,因此A
必须是int
的数组
但您可以构造更复杂的声明:
与
您可以在表达式中使用((A))
,它将具有类型int
,因此A
必须是int
与
您可以在表达式中使用*A[i]
,它的类型为int
,因此A
- 必须是一个数组
- 它的元素必须是指向
int
A
必须是指向int
的指针数组
同样地
int (*A)[100];
您可以在表达式中使用(*A)[i]
,它将具有类型int
,因此A
- 必须是指针
- 它指向的对象必须是
int
A
必须是指向int
数组的指针
这就是所谓的“变量声明的语法模仿表达式的语法”:当你声明一个变量时,你会编写一个小表达式,它的结果类型是给定的,通过反向推理,你可以推断出被声明变量的类型在数学中,语法是指控制数学系统行为的规则,如逻辑中使用的形式语言。“我说得对吗?从技术上说是的,但你只涉及了一个微不足道的案例,而这个案例本身并不值得一个特殊的规则。当一个声明涉及指针、数组、函数及其组合时,这个规则就变得有趣而不平凡了。这里的表达式是*ip varable是ip。@n.m.这是一个非常奇怪的定义。语法控制形式,而不是行为。@EJP行为是直接从形式派生出来的。我不认为
((A))
示例值得包含,但其余的都很好。@JonathanLeffler这是为了说明声明符类似于任意(甚至冗余)的表达式括号是允许的。请解释一下你在表达式中的意思是什么?以及表达式中的“((A)),并且它将具有int类型”,那么A如何必须是int呢?原始的函数表示法指针也同意:double(*fun)(double)=sin;双d=(*乐趣)(2.1)代码>-演示“声明匹配使用语法”的meme。OTOH,标准C现在允许double d=fun(2.1)代码>,尽管我仍然喜欢显式表示法,以显示我的古老。此外,指向函数的指针可能超出了一开始就在这个概念上苦苦挣扎的人。@Bhaskar2
是一个类型为int
的表达式(2)
也是类型int
的表达式,((2))
。可以在值周围使用任意括号。变量也是如此:如果(x)
具有类型int
,那么x
也具有类型int
。
int A[100];
int (((A)));
int *A[100];
int (*A)[100];