C语言函数传参传地址 c语言函数传递地址

c语言传值和传地址输出:
调用函数前输出结果:
nums[1]=0
nums[2]=0
nums[3]=0
nums[4]=0
value = https://www.04ip.com/post/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
i++;[i=2],iMAXELS成立,继续循环,vals[i]=1,nums[0,1,1,0,0],输出:vals[2]=1
i++;[i=3],i5成立,继续循环,vals[i]=1,nums[0,1,1,1,0],输出:vals[3]=1
i++;[i=4],i5成立,继续循环,vals[i]=1,nums[0,1,1,1,1],输出:vals[4]=1
i++;[i=5],i5不成立,结束循环,输出:m=1
函数返回,m被舍弃 , 输出:
调用函数后输出结果:
nums[1]=1
nums[2]=1
nums[3]=1
nums[4]=1
value = https://www.04ip.com/post/0
由于子程序中没有计算过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=https://www.04ip.com/post/findMax(nums,value);
如果子程序不需要value作为m的初始值,则可省略第2个参数:int findMax(int vals[]),调用:value=https://www.04ip.com/post/findMax(nums);
在c语言中 , 指针作为函数参数,形参只能传递值,而不能传递地址,是怎么回事?C语言中,函数参数只能传值 。与传值对应的是传引用,C语言不支持函数参数传引用,C++语言才支持 。
C++传引用函数:
void foo(int a) { a = 3; }
假如a = 2,执行foo(a)后,a = 3 。
---
C语言可以模拟传引用,方法是通过指针来实现:
void foo2(int* ap) { *ap = 3; }
假如a = 2,执行foo2(a)后,a = 3
foo2(a)调用本质上仍然是传值 , 只不过传递的是指针,指针即是地址 , 地址本质上是一个无符号整数 。
如果:
void foo3(int b) { b = 3; }
假如a = 2,执行foo3(a)后,a = 2 。这是因为foo3(a)调用过程中,a值传给形参b,修改b的值与实参a无关 。
注意到,foo3(a)与上述foo(a)传引用的调用是形式一样的 。
既然C语言通过指针可以实现传引用调用,为什么C++还要引入引用这个特性呢?这是因为C++引入的很多新特性需借助引用来实现,比如,拷贝构造函数等等 。
C语言:什么时候需要在函数间传递函数的地址,如何传?当传递的数 , 不止一个的时候 , 或者要改变参数值得时候返回实参的值得时候 。就用传递地址 。
例如:
getct(int
*a,int
*b)
{
printf("%d
%d",*a,*b);
}
mian()
{
int
x=5,y=3;
int
【C语言函数传参传地址 c语言函数传递地址】*s,*z;
s=x;z=y;
getct(s,z);
}
关于C语言函数传参传地址和c语言函数传递地址的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。

    推荐阅读