【发布时间】:2015-11-04 17:34:35
【问题描述】:
我正在尝试了解为什么以下代码不起作用...请帮助:
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);为什么不将其转换为加倍并将其传递给函数? ...抱歉没有指出eailer ....
【问题讨论】:
-
int和double的大小不一样
-
第一步:获取decent book on C,第二步:阅读。
-
incme((double *)&i)中的类型转换;将 int 转换为 double 吗?
-
类型转换会将
int*转换为double*,这会导致C 的所有规则都失效,因为实际上不允许您这样做。
标签: c pointers pass-by-pointer