程序有关问题:指针做为函数的形参做参数
程序问题:指针做为函数的形参做参数
代码如下:
void swap(float *x,float *y)
{
float temp;
temp = *x;
*x = *y;
*y = temp;
}
void mymul(float *p)
{
*p = *p * 2.0;
}
void mymul1(double *p)
{
*p = *p * 2.0;
}
main()
{
float f = 6.0;
float e = 6.0;
int a = 3 ,b = 4;
mymul(&f);
mymul1((double *)&e);
swap(&a,&b);
printf("now f = %f\n",f); //执行结果 f = 13
printf("now e = %f\n",e); //执行结果 e = 6.0
printf("now a = %d, b = %d \n",a,b);
getchar();
return 0;
}
用vc 6。0 调试 结果如注视中所示。 为什么 f =13 ,而不是12呢? 还有e 为什么是6?
------解决方案--------------------
mymul1((double *)&e);
已经越界处理了,
float 是4字节的,而double是8字节的数据
mynull里强制把float的e当double处理,这样mynull不仅改e的值同时还改变e后面4个字节的值,VC里刚好是
变量f,但不同编译器可能不一样,至于为什么是13.0和6.0就只能自己用浮点数的储存方法自己把两个浮点数的内存值计算出来换成double再乘以2后再换算回内存值,再分成两个float,分别算结果了.
代码如下:
void swap(float *x,float *y)
{
float temp;
temp = *x;
*x = *y;
*y = temp;
}
void mymul(float *p)
{
*p = *p * 2.0;
}
void mymul1(double *p)
{
*p = *p * 2.0;
}
main()
{
float f = 6.0;
float e = 6.0;
int a = 3 ,b = 4;
mymul(&f);
mymul1((double *)&e);
swap(&a,&b);
printf("now f = %f\n",f); //执行结果 f = 13
printf("now e = %f\n",e); //执行结果 e = 6.0
printf("now a = %d, b = %d \n",a,b);
getchar();
return 0;
}
用vc 6。0 调试 结果如注视中所示。 为什么 f =13 ,而不是12呢? 还有e 为什么是6?
------解决方案--------------------
mymul1((double *)&e);
已经越界处理了,
float 是4字节的,而double是8字节的数据
mynull里强制把float的e当double处理,这样mynull不仅改e的值同时还改变e后面4个字节的值,VC里刚好是
变量f,但不同编译器可能不一样,至于为什么是13.0和6.0就只能自己用浮点数的储存方法自己把两个浮点数的内存值计算出来换成double再乘以2后再换算回内存值,再分成两个float,分别算结果了.