Tag: 左值

指针增量和解除引用(左值必需错误)

我试图理解指针递增和解除引用是如何组合在一起的,我这样做是为了试一试: #include int main(int argc, char *argv[]) { char *words[] = {“word1″,”word2”}; printf(“%p\n”,words); printf(“%s\n”,*words++); printf(“%p\n”,words); return 0; } 我希望这段代码可以执行以下操作之一: 首先取消引用然后增加指针(打印word1) 首先取消引用然后增加值(打印ord1) 取消引用指针+ 1(打印word2) 但编译器甚至不会编译它,并给出了这个错误: lvalue required as increment operand我在这里做错了吗?

转换指针不会产生左值。 为什么?

在这里发表我最有争议的答案之一后,我敢问几个问题,最终填补了我的知识空白。 为什么不将类型((type_t *) x)的表达式视为有效的左值,假设x本身是指针和左值,而不仅仅是某个表达式? 我知道很多人会说“标准不允许它”,但从逻辑的角度看它似乎是合理的。 标准不允许的原因是什么? 毕竟,任何两个指针都具有相同的大小,指针类型只是一个编译时抽象,指示在进行指针运算时应该应用的适当偏移量。