int x = 2; *&&& *** x会返回什么?

时间:2017-03-21 07:08:55

标签: c pointers

上述表达式将按*(&(&(&(*(*(*X)))))

分类

据我所知,我认为编译器可以跟踪(***X)的值。但是当它试图检索值的地址时会发生什么,即; &(***X)。这会有用吗?因为值是一些随机数是一个表达式。编译器是否会搜索该值并返回其地址?如果不是什么输出?

3 个答案:

答案 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。您将收到编译错误。