《C上的指针》第六章第七个问题的正确答案是什么?[副本]

x33g5p2x  于 2023-08-03  发布在  其他
关注(0)|答案(1)|浏览(71)

此问题在此处已有答案

Pointers on C, need simple verification(2个答案)
3天前关闭。
我正在学习C编程的书指针在C,并有一个问题,第七章的问题。
如果变量h,i,q,x都是指向整数的指针,这些变量的地址和内容如下:
| 联系地址|内容| Content |
| --|--| ------------ |
| 一百零八|1020| 1020 |
| 1020|一百零八| 1080 |
| 一零八四|一零七二| 1072 |
| 一零七六|一百零八| 1080 |
**h*++*q的右值和左值地址是什么?
我认为这两个表达式都是非法的,因为h和q是指向整数的指针,而不是指向指针的指针,我们不能两次尊重它们。然而,官方的答案给出1080和1020作为**h的右和左值地址,1021作为*++*q的右值。

bnl4lu3b

bnl4lu3b1#

按照现代标准,这是非法的。*h产生整数,解引用 * 不能用于整数。
但是让我们假设我们有一个1965年的幼稚C实现和环境(一些微控制器),其中指向任何地址都是已知的,内存是物理的,整数可以转换为指针,等等。
**h等于*(*h)(*h)是指i地址,*i是指h地址。
现在完全停止。**h的右(列)值内容是1080,但表达式的时态值没有任何预定义的地址。最像作者混淆了自己和读者,在这种情况下将指针值(*h等于1020)称为“左值”。
“左值”和“右值”是具有特定含义的术语,并且以上使用不是它。

相关问题