分析以下程序的运行结果() #include <stdio.h> func(int a,int b) {int temp=a;a=b......

[复制链接]
查看11 | 回复5 | 2017-10-6 15:15:21 | 显示全部楼层 |阅读模式
传值的地方是x=10;y=20;func(x,y);把x和y传给函数func。所以实参是x和y,形参是a和b。至于副本,是由编译器做的,比如对于你给的例子,编译器会创建副本_x=10;_y=20;在func函数交换的值是_x和_y的值,不会改变x和y自身的值,传地址的时候比如改成func(int* a,int* b) {int temp=*a;*a=*b;*b=temp;}func(&x,&y);编译器也会创建副本,只不过副本的值是&_x和&_y与&x和&y的值是一样的(同一块地址中的值),这样交换的话就会改变x和y本身的值,所以传值和传地址的实质是一样的。...
回复

使用道具 举报

千问 | 2017-10-6 15:15:21 | 显示全部楼层
func(int a,int b) a,b是形参func(x,y); x,y实参值传递是x,y作为参数给函数2个数值,并不是给了函数地址值传递进入函数对于变量的作用域不同,所以函数相当于重新开辟的地址保存值,所以不会影响原来的值...
回复

使用道具 举报

千问 | 2017-10-6 15:15:21 | 显示全部楼层
因为你调用FUN(X,Y)时,只是把X,Y的值赋值给A和B。就相当于:int x=10,y=20,a=x,b=y;你改变变量A,B的值,XY当然不会受到影响。...
回复

使用道具 举报

千问 | 2017-10-6 15:15:21 | 显示全部楼层
func(int a,int b) {int temp=a;a=b;b=temp;}传的是形参。所以不会改变a,b的值。#includefunc(int a,int b)//形参 {int temp=a;a=b;b=temp;} funcA(int & a,int& b)//传入引用,...
回复

使用道具 举报

千问 | 2017-10-6 15:15:21 | 显示全部楼层
haha,其实道理很简单,你知道函数的参数是属于形参吗,比如全局变量就是实参,数值传进去后编译器会做一个副本,例如参数a_1 = a;b_1 = b; 而函数内部用的是a_1和b_1,所以没有改变a和b的,如果需要做交换ab的值,就传入地址,比如穿ab的引用...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行