对于函数参数的传递机制有:值传递机制,地址传递机制小小总结下,有不对的地方希望指出来。
(复制传递方式)值传递方式:函数调用时,为形参分配单元,并将实参的值复制到形参中;调用结束以后,形参单元被释放,实参单元任然保留并维持原值。
特点:1.形参和实参占用不同的内存单元
2.单向传递性
地址传递机制:方式:函数调用时,先将数据的存储地址作为参数传递给形参
特点:1.形参与实参占用相同的内存单元
2.双向传递性
3.实参和形参必须是地址常量或变量,获得变量的存储地址有:使用取地址符号,使用指针变量,数组名称,函数名称。
下面贴代码部分:
数值传递:
void swap(int x,int y)//注意形参
{
int mid = 0;//初始化
mid=x;x=y;y=mid;
}
void main()
{
int x=3,y=5;
printf("x:%d,y:%d\n",x,y);
swap(x,y);
printf("x:%d,y:%d\n",x,y);
}
打印结果为:x:3,y:5 结果并未变化,因为只有main函数传值给被调函数参数,而被调函数运行结束,释放内存空间,此过程只具有单向传递性。很多人会问,若是函数加上返回值,补充一点,函数返回值是可以利用的,但是参数本身在被调函数运行结束后就释放了,它的作用域只是在它自己。
数值传递:
void swap(int *x,int *y)//注意形参
{
int mid = 0;//初始化
mid=*x;*x=*y;*y=mid;
}
void main()
{
int x=3,y=5;
printf("x:%d,y:%d\n",x,y);
swap(&x,&y);
printf("x:%d,y:%d\n",x,y);
}
打印结果为:x:5,y:3 结果发生改变,原因很简单,具有双向传递性。