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