输出:
调用函数前输出结果:
nums[1]=0
value = 0
因为循环变量初值是1,所以nums[0]不会输出
findMax(nums,value); //调用findMax,vals指向nums开始元素,m=0
i=1;[i=1],iMAXELS成立,开始循环,vals[i]=1,nums[0,1,0,0,0],输出:vals[1]=1
函数返回,m被舍弃,输出:
调用函数后输出结果:
nums[1]=1
由于子程序中没有计算过m,所以m值一直是初始的1,这个m是函数自己临时定义的变量,用来接收调用者传进来的参数,main函数将vale的值0传递给m,计算完后,函数返回,m被舍弃,不会影响value的值(作为参数,是取value的值来用一下,然后就没有value的事了)
如果想将m的值返回,那么有两种办法:
函数写成:void findMax(int vals[],int *m),然后函数中用到m的地方都改成*m,调用时findMax(nums,value);
函数写成:int findMax(int vals[],int m),函数最后写return m;调用时value=findMax(nums,value);
按照规定做,就行了.
不用问为什么.
规则,都是人为规定的.
有时,就是胡乱定的,以后,再改版升级,就变了.
用不着深究.
①.、值传递:不管怎么传,原来的实参的值都不会改变.
地址传递,原来的实参的值可能被改变.
打个比方:
值传递就好象你告诉别人你的帐户里有多少钱 帐户里的钱不会改变.
地址传递就好象你告诉别人你的帐户密码 帐户里面的钱可以被改变.
#includestdio.h
point(char *pt)
main()
point(pt);
printf("%c\n",*pt);
}
point(char *p)
*p='F';}//加上这一句就变了
先举个简单例子:
#include iostream
using namespace std;
void Add1(int *a)
{
(*a)++;
a++;
int main()
Add1(x);
coutx" "yendl;
return 0;
在调用Add1(x)时,系统先建造int型指针a,然后将实参x的地址传给了指针a,故此时a与x是指向同一地址,即共享统一数据,当对地址a内的数据进行操作,就是对x进行操作.a++时自然也对x++,当函数调用结束,指针a释放掉,x的值此时已经发生了变化.
这就是两者不同,地址传递的参数都是指针类型,于数值传递不一样.
至于选择那种传递,就要看这个程序的具体目的和功能了,一般要对参数进行修改的要用地址传递,而只是调用参数的数据进行其他计算并不需要修改数据本身宜用数值传递.
还有什么不明白吗
当传递的数,不止一个的时候,或者要改变参数值得时候返回实参的值得时候.就用传递地址.
例如:
getct(int
*a,int
*b)
printf("%d
%d",*a,*b);
mian()
int
*s,*z;
s=x;z=y;
getct(s,z);
以上就是土嘎嘎小编为大家整理的c语言传地址函数相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!