#include "stdio.h"
#include "stdlib.h"
void fun(float *p1,float *p2,float *kkk)
{
//这里其实你可以把指针名字改为kkk
//这个指针不是外面哪个指针s,可以看做是拷贝了一份指针
kkk=(float *)calloc(1,sizeof(float));
*kkk=*p1+*p2++;
}
main()
{
float a[2]={1.1,2.2},b[2]={10.0,20.0},*s=a;
fun(a,b,s);//实际上s的地址从函数出来以后并没有变,还是指向a的,因为这时候体现了指针作为一种变量性质。
printf("%5.2f\n",*s);
}
//函数内部对指针的重新赋值相当于局部变量。你在函数里只能改变指针指向变量的值,而不能改变指针的值.如果你希望改变指针的指向地址需要返回一个地址。下面这个程序就可以得到11.1
#include "stdio.h"
#include "stdlib.h"
float * fun(float *p1,float *p2,float *s)
{
s=(float *)calloc(1,sizeof(float));
*s=*p1+*p2++;
return s;
}
main()
{
float a[2]={1.1,2.2},b[2]={10.0,20.0},*s=a;
s=fun(a,b,s);
printf("%5.2f\n",*s);
}
fun(a,b,s);
函数调用是传值还是传址不能只看函数原型,要看怎么调用的。
这里调用的时候传递的s,函数内的局部变量s只是这个s的一个值copy而已,他的修改不会改变main的值。
因为void fun(float *p1,float *p2,float *s)中*s 看起来象传址所以才会造成理解错误
这个是指针函数,其实S是改变了,但是*s是指向S的原地址,地址值不变,这个就是指针和其他不用的地方,多看看分析就会掌握的。
keefo的答案经过了我的指导和审核,最终被确定是正确的合格的绿色无污染的,如果你认为可以的话,就把给他的分加给我吧,我想他是不会介意的