c语言程序 #include<stdio.h> #include<stdlib.h> void fu

c语言程序
#include<stdio.h>
#include<stdlib.h>
void fun(float *p1,float *p2,float *s)
{ s = (float *)calloc(1,sizeof(float));
*s = *p1 + *p2 ++;
}
main()
{ float a[2] = {1.1,2.2},b[2] = {10.0,20.0},*s = a;
fun(a,b,s); printf("%5.2f\n",*s);
}
运行结果是
1.10
为什么不是 11.10,指针s所指的数值为什么没变?
*与++同级,另外,我把++删去后,结果还是一样 。.s是怎么指回来的?

#include<stdio.h>
#include<stdlib.h>
void fun(float *p1,float *p2,float *s)
{ s = (float *)calloc(1,sizeof(float)); //s此时已经不再指向a了
*s = *p1 + *p2 ++; // 这句话相当于 *s=*p1+*p2;*p2=*p2+1;
}
main()
{ float a[2] = {1.1,2.2},b[2] = {10.0,20.0},*s = a;
fun(a,b,s); printf("%5.2f\n",*s); //函数中s被指向另一个地址,所以a的内容没变化,此处s仍是指向a, 此处*s等价于a[0]
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-07-18
*的优先级比++低,所以 *s = *p1 + *p2 ++;这句其实是 *s = *p1 + *(p2 ++);p2是地址,p2++这个地址指的是什么就不知道了。
第2个回答  2012-07-18
关键在这一句
s = (float *)calloc(1,sizeof(float));
给s新分配空间了
而主函数中s指向的还是数组a
你如果把这句话去掉结果就是11.10了本回答被网友采纳
第3个回答  2012-07-18
和sizeof有关 如果你把sizeof去了就行了 你试试吧
相似回答
大家正在搜