在函数中我们需要对一些形参进行操作,但是这些有时候并不会影响在外部传进来的实际参数值,这就是传值了,它可以理解为给了你一个复制版的参数,你随便进行操作,但是不会影响我实际的参数。
int a =1; int b=2; void updataint (int i,int j) { i=3; j=4; } updataint(a,b); printf("%d\n%d\n",a,b);
这个代码段中最后输出的a和b的值时1和2,但是我们在这个updataint这个函数中确实进行新的赋值吧,但是并没有影响外部的a和b,这就是传值。
int a =1; int b=2; void updataint (int *i,int *j) { *i=3; *j=4; } 在这里要注意了,在C的函数形参中,你定义的是指针类型的,但是在外部使用并放入参数的时候这个参数必须是引用类型的才可以。 updataint(&a,&b); printf("%d\n%d\n",a,b);
在这个代码中和之前的代码区别并不是很大,只有在函数的形参中做出了改变,函数定义的形参是指针类型的了,这个运行的结果就是 a和b 分别是3 和 4了,这就是传入值和传址的不同了,传址是把地址给你了,就相当于给了你家门钥匙一样,你可以直接进去使用里面的东西,那么如果你对里面的东西进行了修改等,那对应的别的人去用这个屋子的时候呈现出的就是你之前修改的后的样子了。
在C的函数中你定义的形参不能是引用类型的,只能是指针或者值类型,
上述讲的两个代码就是传值和传址的区别,传值不会影响你外部变量或对象的值,但是传址就会出现影响你外部的变量或对象的值了,因为传址的话是直接对你这个地址内的东西进行操作了。所以函数在设置形参时要考虑好用什么类型的形参。