假设k是指向C中的整数的指针.
对于表达式**k,当我们尝试在赋值运算符("=")的右侧对此进行求值时,该值是否非法?
这是我的想法:
**k实际上是*(*k).当我们取消引用k时,我们得到一个整数的值.然后我们尝试取消引用一个整数,这是一个非法的操作.
但是我的教科书说右边的这个表达实际上是合法的.
为什么这样?
C208标准在第6.5.3.2节第2段中说,"一元运算*符的操作数应具有指针类型."如果k是指向整数*k的指针,那么它是一个整数,它不是指针类型,所以它不能是一元运算*符的操作数.因此,诸如x = **k违反此规则的表达.
规则ins 6.5.3.2 2是一个约束,这意味着需要符合标准的编译器来生成诊断消息,并且C标准不定义行为.
从技术上讲,除了发出诊断消息之外,C编译器还可以接受表达式并定义它.我不知道有没有这样做,没有共同的编译器这样做.
字符**k可能出现在一些较大的表达式中,它们不能同时作为一元运算*符,例如in x = y**k,这相当于x = y * *k第一个*是二元乘法运算符.您应该显示教科书中显示的确切文本.