上述表达式将按*(&(&(&(*(*(*X)))))
据我所知,我认为编译器可以跟踪(***X)
的值。但是当它试图检索值的地址时会发生什么,即; &(***X)
。这会有用吗?因为值是一些随机数是一个表达式。编译器是否会搜索该值并返回其地址?如果不是什么输出?
答案 0 :(得分:4)
编译错误。你不能解除引用int。
答案 1 :(得分:3)
您的假设不正确:*&&&***x
不会分解 *(&(&(&(*(*(*X)))))
,它会被标记为*
&&
{{1} } &
*
*
*
,导致语法错误。
在x
中添加空格会导致约束违规,因为您无法获取地址的地址,也不能将*& & &***x
变量int
取消引用作为指针。
相反,x
是一种正确的扭曲方式,可以取*&*&*&*&x
的值,x
也是如此。
答案 2 :(得分:0)
不,问题出现,因为x的类型为int。它包含值2.当你说* x时,它表示“我想要x指向的变量的值”。你知道2不是内存中的有效地址。这会导致错误。(您可以分配的唯一有效地址是0.) 另外,由于x的类型为int,因此无法取消引用int。您将收到编译错误。