#include
#include
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]
}
*的优先级比++低,所以 *s = *p1 + *p2 ++;这句其实是 *s = *p1 + *(p2 ++);p2是地址,p2++这个地址指的是什么就不知道了。
关键在这一句
s = (float *)calloc(1,sizeof(float));
给s新分配空间了
而主函数中s指向的还是数组a
你如果把这句话去掉结果就是11.10了
和sizeof有关 如果你把sizeof去了就行了 你试试吧