4个回答
展开全部
首先理解值传递和地址传递的区别。
第二个程序就是值传递。实参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的值。
第二个程序就是值传递。实参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语言使用的是值传递,仅仅将实参的值传递给形参。
对于第一种写法
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没有什么影响
这就是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没有什么影响
这就是C语言参数的值传递的奇妙之处了。
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
第二个交换了x和y,对a和b没有影响,因为形参和实参的内存地址是不一样的
第一个交换了a和b的地址所指向的内容,所以交换有效
第一个交换了a和b的地址所指向的内容,所以交换有效
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询