我试图理解为什么下面的代码不工作。。。请帮忙:

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/

10-12 22:41