为什么*(& identifier)= value在C中有效?

时间:2016-08-21 16:59:53

标签: c dereference

例如,

int x = 10;
*(&x) = 20;
printf("%d \n",x); // output is 20

根据ISO C11-6.5.3.2第4段,它说

  

一元*运算符表示间接。如果操作数指向a   功能,结果是功能指示符;如果它指向一个   对象,结果是指定对象的左值。如果是操作数   有类型''指向类型'',结果类型''类型''。如果   无效值已分配给指针,行为   unary *运算符未定义。

由于操作数&x既不是函数指示符也不是对象指示符(它是指向int类型的指针),我期望未定义的行为,但它工作正常!我错过了什么?

2 个答案:

答案 0 :(得分:5)

运算符&x表示变量x的地址。当您在其前面使用星号时,这表示变量x 地址处的 内容,只是x

运营商*&相互抵消,就像那样使用。

答案 1 :(得分:1)

让我为你解析一下:

int x = 10;
*(&x) = 20;
  • * ==星号运算符
  • &x ==操作数(星号运算符)
  

如果操作数指向函数,则结果为函数   标志;如果它指向一个对象,结果是一个左值   指定对象。

操作数(& x == x的地址,其中x是int)指向int类型的对象。

=>结果是左值指定x(x ==对象)。

  

如果操作数具有类型''指向类型'的指针,则结果具有类型   “类型'”。

操作数的类型为指向int 的指针,因此结果的类型为int。