我试图理解为什么下面的代码不工作。。。请帮忙:
void incme(double *p)
{
printf("%x,%x\n",p,*p);
*p = *p + 1;
printf("%x,%x\n",p,*p);
}
int main()
{
int i = 1;
incme((double *)&i);
printf("%x,%x",&i,i);
}
输出为:
ff99a348,1
ff99a348,1
ff99a348,1
我期待着:
ff99a348,1号
ff99a348,2号
ff99a348,2号
它打破了我所知道的关于指针的一切。。。
谢谢。
编辑:
我要问的主要问题是incme((double*)&i)中的类型转换;为什么不将其转换为double并将其传递给函数?... 很抱歉没有指出。。。。
最佳答案
因为不确定的行为。整数不是浮点,浮点也不是整数。除此之外,我想你会发现sizeof(int) != sizeof(double)
。
你还打破了strict aliasing rule。
与问题无关,如果要打印指针,则应使用"%p"
格式。
关于c - 为什么此指针传递未按预期工作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31959621/