求助 void指针强制转换之后自增 表现不出来 eg:ad
c4droid吧
全部回复
仅看楼主
level 11
求助 void指针强制转换之后自增 表现不出来 eg:addr=((int*)addr)++;这句应该是
正确的
。不过我把括号去掉就能运行了eg:addr=(int*)addr++;运算符的优先级我也考虑过。求解
2017年10月14日 02点10分 1
level 14
这么解看如何,
一对()操作就会产生一个临时值,注意是值而不是变量,那么值就不能自增。就像你不能5++,8++这样。能理解不。
2017年10月14日 03点10分 2
这点我能理解,但是addr是void指针变量,也不存在常量的值。 printf("int [%x] ->",addr); addr=(int*)addr++; printf("[%x]\n",addr++); 我改成这样,最后输出却没有发生变化
2017年10月14日 15点10分
@💤💤💤💤💤💤呼 就是这样的,过程应该是到 (int*)addr 的时候,产生一个值暂放寄存器或者别的地方,然后addr自增,然后左边的 addr对于那个值,最后也是一样,先把值存好,addr自增,printf再把刚存的值打出来。
2017年10月14日 16点10分
@💤💤💤💤💤💤呼 这个是后缀++的执行方式,你可以把++放在前面,这样变量会先自增,再产生临时值给=号的左边
2017年10月14日 16点10分
@💤💤💤💤💤💤呼 你可以先理解一个,所有右边的都是表达式,哪怕一个函数或者一个变量都是表达式,表达式现计算出值,左边才过来取走这个值
2017年10月14日 16点10分
1