值传递和引用传递
” 按值传递 “中包括值传递(实实在在的值啊!)和指针传递(指针传递参数本质上是值传递的方式,它所传递的是一个地址值),传递的都是实参的一个拷贝。
#include <iostream>
using namespace std;
void swap(int x, int y) {
int tmp;
tmp = x;
x = y;
y = tmp;
}
int main() {
int a = 2, b = 3;
printf("before:%d,%d\n", a, b);
swap(a, b);
printf("later:%d,%d\n", a, b);
return 0;
}
结果:
before:2,3
later:2,3
下面的例子体现了不论传递的是值还是指针 (指针也是一个值),传递给被调用函数的都是实参的一个拷贝,直接对拷贝进行操作不会影响实参
#include <iostream>
using namespace std;
void swap(int *x, int *y) {
cout<<"函数内-start"<<endl;
cout<<"*x:"<<*x<<" *y:"<<*y<<endl;
cout<<"&x:"<<&x<<" &y:"<<&y<<endl;
cout<<"x:"<<x<<" y:"<<y<<endl;
cout<<"开始交换"<<endl;
int *temp= NULL; //因为x,y的类型都是int *
temp= x; //temp= &a &a:0x61fe1c &b:0x61fe18
x = y; // &a= &b
y = temp; //&b=temp
//所以交换x,y只是交换了两者存储的值(值为&a,&b),并没有涉及到主函数a,b值的交换
//所以只是操作地址并没有卵用
cout<<"*x:"<<*x<<" *y:"<<*y<<endl;
cout<<"&x:"<<&x<<" &y:"<<&y<<endl;
cout<<"x:"<<x<<" y:"<<y<<endl;
cout<<"函数内-end"<<endl;
}
int main() {
int a = 2, b = 3;
cout<<"before a:"<<a<<" b:"<<b<<endl;
cout << "before &a:" << &a << " &b:" << &b << endl;
swap(&a, &b);
cout<<"later a:"<<a<<" b:"<<b<<endl;
cout << "later &a:" << &a << " &b:" << &b << endl;
return 0;
}
结果
before a:2 b:3
before &a:0x61fe1c &b:0x61fe18
函数内-start
*x:2 *y:3 //0x61fe1c->2,0x61fe18->3
&x:0x61fdf0 &y:0x61fdf8
x:0x61fe1c y:0x61fe18
开始交换
*x:3 *y:2 //0x61fe1c->2,0x61fe18->3
&x:0x61fdf0 &y:0x61fdf8
x:0x61fe18 y:0x61fe1c
函数内-end
later a:2 b:3
later &a:0x61fe1c &b:0x61fe18
#include <iostream>
using namespace std;
void swap(int *x, int *y) {
cout<<"函数内-start"<<endl;
cout<<"*x:"<<*x<<" *y:"<<*y<<endl;
cout<<"&x:"<<&x<<" &y:"<<&y<<endl;
cout<<"x:"<<x<<" y:"<<y<<endl;
cout<<"开始交换"<<endl;
int temp;
//*x作用就是:取指针x的值(&a),再把这个值作为地址,再取这个地址的值!相当于*(&a)=a
temp= *x; //temp=a
*x = *y; //a=b
*y = temp; //b=temp
cout<<"*x:"<<*x<<" *y:"<<*y<<endl;
cout<<"&x:"<<&x<<" &y:"<<&y<<endl;
cout<<"x:"<<x<<" y:"<<y<<endl;
cout<<"函数内-end"<<endl;
}
int main() {
int a = 2, b = 3;
cout<<"before a:"<<a<<" b:"<<b<<endl;
cout<<"before &a:"<<&a<<" &b:"<<&b<<endl;
swap(&a, &b);
cout<<"later a:"<<a<<" b:"<<b<<endl;
cout<<"later &a:"<<&a<<" &b:"<<&b<<endl;
return 0;
}
结果:
before a:2 b:3
before &a:0x61fe1c &b:0x61fe18
函数内-start
*x:2 *y:3
&x:0x61fdf0 &y:0x61fdf8
x:0x61fe1c y:0x61fe18
开始交换
*x:3 *y:2
&x:0x61fdf0 &y:0x61fdf8
x:0x61fe1c y:0x61fe18
函数内-end
later a:3 b:2
later &a:0x61fe1c &b:0x61fe18
陈异铥:文章真不错http://meig.1ut9wd.cn
博主真是太厉害了!!!
叼茂SEO.bfbikes.com
怎么收藏这篇文章?
不错不错,我喜欢看 https://www.237fa.com/
不错不错,我喜欢看 https://www.237fa.com/
看的我热血沸腾啊https://www.ea55.com/
想想你的文章写的特别好www.jiwenlaw.com
哈哈哈,写的太好了https://www.cscnn.com/
真棒!
你的文章内容非常精彩,让人回味无穷。 http://www.55baobei.com/hNnWkBg1zF.html
你的才华让人惊叹,请继续保持。 https://www.yonboz.com/video/98850.html
真好呢
哈哈哈,写的太好了https://www.lawjida.com/
多语种文献的引用彰显学术包容性。
这是一篇佳作,无论是从内容、语言还是结构上,都堪称完美。
这篇文章提供了宝贵的经验和见解,对读者有很大的启发和帮助。
选材新颖独特,通过细节描写赋予主题鲜活生命力。
平淡中见真章,质朴处显功力。
作者对主题的挖掘深入骨髓,展现了非凡的洞察力和理解力。
防线秘密护送
汤姆与杰瑞遇见福尔摩斯
来聊聊须绪美吧
好人寥寥
的士判官
邪恶之城
c++教程
快乐假期
柠檬糖的魔法
哥斯拉
暗夜女妖
或者乌托邦
悟空传
亚马逊弓箭高手
明日歌
人生大事
东北虎
引爆者
秦岭诡事之守护者
女儿国前传
扭曲的奉献
女拳皇
阿努贾
灰色蝴蝶
关于琼
她想要什么圣诞礼物
贝茨先生与邮局真实的故事
亚瑟的威士忌
环游地球八十天
或者乌托邦
房子里的陌生人
乔治湖
暗潮汹涌之惊魂12小时
热血燃烧
马1956
星际迷航31区
武林足球
残酷真相