问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

C语言形参和实参,传值调用和引用调用的区别4

发布网友 发布时间:2023-10-23 22:09

我来回答

2个回答

热心网友 时间:2024-11-15 20:41

int a(int x){//这个x就是形参,就是你定义的变量名称

    .........

}


int main(){

    int y=5;

    a(y);//具体的变量y就是实参

    a(z);//z也是实参,就是实实在在的值

}

#include<iostream>
using namespace std;
void swap(int a,int b)
{
int temp;
temp=a;
a=b;
b=temp;
}
main()
{
int a=3,b=5;
cout<< "before ‘swap’:a="<<a<<",b="<<b<<endl;
swap(a,b);
cout<<"after ‘swap’:a="<<a<<",b="<<b<<endl;
}
这个例子是传值调用, 意思就是 形参 的 改变不会影响 实参的值。
你运行一下可知 主函数调用了swap函数后 a,b的值并没有发生交换。
原因是,调用swap函数时 编译器为 swap(int a,int b) 中的形参 a , b单独分配内存空间,并接受主函数传递来的值,这块内存空间和 main()函数中的 a ,b 不是同一内存空间。 所以在swap(int a,int b) 中 a , b发生了交换,但main函数中a , b没发生交换。即主调函数与被调函数的操作对象各不相同,参数仅在调用时由实参向形参传递,而不可由形参向实参传递。

要使a ,b发生交换 需要使用传址调用。程序改为如下:
#include<iostream>
using namespace std;
void swap(int & a,int &b)
{
int temp;
temp=a;
a=b;
b=temp;
cout<<"in ‘swap’:a="<<a<<",b="<<b<<endl;
}
main()
{
int a=3,b=5;
cout<< "before ‘swap’:a="<<a<<",b="<<b<<endl;

swap(a,b);
cout<<"after ‘swap’:a="<<a<<",b="<<b<<endl;
}

引用可以看作是一个变量的别名,使用 引用 时 ,对于void swap(int a,int b) 编译器并没有给形参a,b分配新的内存空间,只是使 形参a,b指向了main函数中实参a,b的内存空间,他们共享同一内空间,即把地址给了形参。所以在void swap(int a,int b)函数中对这块内存的改变也就改变了实参的值。
除了使用引用,也可以使用指针。

指针方式和引用方式都属于传址调用。

热心网友 时间:2024-11-15 20:42

int
a(int
x){//这个x就是形参,就是你定义的变量名称
.........
}
int
main(){
int
y=5;
a(y);//具体的变量y就是实参
a(z);//z也是实参,就是实实在在的值
}
#include<iostream>
using namespace std;
void swap(int a,int b)
{
int temp;
temp=a;
a=b;
b=temp;
}
main()
{
int a=3,b=5;
cout<< "before ‘swap’:a="<<a<<",b="<<b<<endl;
swap(a,b);
cout<<"after ‘swap’:a="<<a<<",b="<<b<<endl;
}
这个例子是传值调用, 意思就是 形参 的 改变不会影响 实参的值。
你运行一下可知 主函数调用了swap函数后 a,b的值并没有发生交换。
原因是,调用swap函数时 编译器为 swap(int a,int b) 中的形参 a , b单独分配内存空间,并接受主函数传递来的值,这块内存空间和 main()函数中的 a ,b 不是同一内存空间。 所以在swap(int a,int b) 中 a , b发生了交换,但main函数中a , b没发生交换。即主调函数与被调函数的操作对象各不相同,参数仅在调用时由实参向形参传递,而不可由形参向实参传递。
要使a ,b发生交换 需要使用传址调用。程序改为如下:
#include<iostream>
using namespace std;
void swap(int & a,int &b)
{
int temp;
temp=a;
a=b;
b=temp;
cout<<"in ‘swap’:a="<<a<<",b="<<b<<endl;
}
main()
{
int a=3,b=5;
cout<< "before ‘swap’:a="<<a<<",b="<<b<<endl;
swap(a,b);
cout<<"after ‘swap’:a="<<a<<",b="<<b<<endl;
}
引用可以看作是一个变量的别名,使用 引用 时 ,对于void swap(int a,int b) 编译器并没有给形参a,b分配新的内存空间,只是使 形参a,b指向了main函数中实参a,b的内存空间,他们共享同一内空间,即把地址给了形参。所以在void swap(int a,int b)函数中对这块内存的改变也就改变了实参的值。
除了使用引用,也可以使用指针。
指针方式和引用方式都属于传址调用。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
说课包括哪些方面 说课内容包括()。 如何在手机百度上删除对话记录? 结核病是什么样的疾病? 曹丕17岁得了肺痨,明知自己命不长久,还要强争王位,是不是很自私呢?_百... 古代小说常出现的病名 急求一篇"生活小窍门"(500字)的作文 至今最有什么小妙招 健康的戒烟方法 笔记本电池锁死是什么原因引起的? 手机上如何同时登录两个 ...选择性培养基上实验组和阴性对照都没有菌落出现,这说明什么?原因是... C语言中传入参数和传出参数的区别4 c语言中,函数传参&a和*a有什么区别?1 电信宽带绑定的手机丢了怎么开钻??就是手机丢了卡也丢了怎么去... 苹果6splus怎么强制重启5 从拓扑学的观点来看,皮球,橡胶做的空心娃娃和汽车轮胎没有什么...1 电信宽带绑定手机后,开的钻是扣手机话费的 还是宽带费的2 用电信的电脑用网通的宽带怎么开钻5 实数的连续性和拓扑学的连续性在本质是一个意思吗?如果不是,那...1 ...程序 如何从一个ACTIVITY跳转到另一个ACTIVITY,我的两个activity都在... 我的电动车上上按了一个低音炮,然后不知道怎么弄的,一打开就是... 怎样学好功夫41 如何在一个Activity里调用另外一个Activity 击打身体可以增加抗击打能力和肌肉硬度吗? dll函数查看器查看一个dll,里面所有的函数参数都只有一个,说明文档却有... 关于传奇百区石头任务怎么做,要用一些什么材料,还有石头的用处 电脑怎么登录两个692 想知道: 济宁市 邹城新长途汽车站 在哪 微信附近人看不到附近人怎么回事1090 第四代Kindle忘记密码了怎么办? 怎么自学功夫?547 ...activity可以实现滑屏的效果吗?好像viewfling时同一个Activity... 热血传奇百区新技能问题(加分在线等)3 苹果6sPlus怎么重启 lg g5从香港买回来,连上WiFi用不了怎么回事?1 请问怎样才能学好功夫?14 如果换了手机和手机号码用以前的那里面的好友还在吗 微信附近的人 无法使用,怎么解决637 微信附近人不能看到我的微信了,怎么回事?怎么办1 在看守所里去会见一次需要多少钱?2 请律师去看守所会见一次需要多少钱34 晚上做梦梦见天使,表示什么8 当红时逼婚男友,婚后却被转移家产,张靓颖如今怎样了? 请问怎么自学好功夫?6 淘宝老板问要多少推广费,我怎么算? 请教个位专家苹果花脸病怎么治,1 怎么实现信息分类网站的有效信息发布13 160斤多少kg 修武振林还招工吗