指针变量作为函数参数为了改变指针变量指向实参的值

转自百度知道:

 

思考:为什么两个运行结果不同

指针变量作为函数参数为了改变指针变量指向实参的值_第1张图片           指针变量作为函数参数为了改变指针变量指向实参的值_第2张图片

 

C语言使用值传递时,仅仅将实参的值传递给形参。 对于第一种写法 main函数传递给Swap函数的是&a和&b的值,即a和b所在的地址的值 那么Swap函数里面通过*x来更改的就是&a所在的地址里面的值,也就是a本身的值了,所以第一种写法main函数调用Swap函数之后,a和b的值会发生互换。 对于第二种写法 main函数传递给Swap函数的是a和b的值,即只是将15和8传递给了Swap函数 那么Swap函数里面更改15和8,和main函数的a和b没有啥关系的,所以第二种写法main函数调用Swap函数之后,a和b的值不会发生互换。Swap函数只是更改了x和y的值,对a和b没有什么影响

要理解值传递和地址传递的区别。

第二个程序就是值传递。实参a的值传给形参x,实参b的值传给形参y。这里的x与a只是值相等了,但是两个不同的内存单元。好比一班和二班两位同学,只是名字都叫张三,却是两个不同的人。同理,b和y也类似于一班和二班另两位同学,只是名字都叫李四,却是不同的两人。在swap函数中,只是对x和y操作,类似于只是二班的张三和李四发生了点变化。他们的变化是不会影响一班的张三和李四的。所以x和y的变化不会影响a和b。因为这是四个不同的内存单元。 第一个程序是地址传递。实参&a(a的地址)传给形参x,实参&b(b的地址)传给形参y。这样的话,x就指向了a,y也指向了b。代码中temp=*x;就等价于temp=a;了。 同理,*x=*y; 等价于a=b; *y=temp;等价于b=temp; 。这里对*x和*y操作,实际上就是对a和b的操作。所以会影响a和b的值

你可能感兴趣的:(c语言基础概念)