我想知道,在下面的声明,p
是左值,即是p
在这个声明中表达? (如果答案是“是”,这是一个左值,因为p
改变位于&p
与价值&n
对象的值)。是一个表达式的声明吗?
unsigned char *p = &n;
我想知道,在下面的声明,p
是左值,即是p
在这个声明中表达? (如果答案是“是”,这是一个左值,因为p
改变位于&p
与价值&n
对象的值)。是一个表达式的声明吗?
unsigned char *p = &n;
Ç说(重点煤矿)为标量的初始化:
(C99,6.7.8p11)“的对象的初始值是,式(变换后)的; 与简单赋值相同的类型约束和转换应用,将标量的类型作为其声明类型的非限定版本。“
并且赋值运算符的约束条件表示左操作数必须是(可修改的)左值。
而且对于术语,而声明并非一个表达,也不是语句,但是在初始化可以是一个表达式。
从Stroustrups C++书的语法部分来看,一个声明语句不是表达式语句。我想这也适用于经典的C语言。所以虽然你的初始化器是一个表达式,但你的声明作为一个整体并不是一个表达式。等号的东西也不是严格意义上的任务;相反,它是一个初始化,稍有不同。出于同样的原因,p
不是一个真正的表达式,即使赋值和初始化有许多共同的规则。
简短的回答你的问题:没有,声明不是一个表达式。声明可能包含表达式来确定类型,但就是这样,初始化表达式也是一个表达式。
看作是你对左值的问题是没有意义的。既然它不是一个表达,它没有价值。