取址符的作用
来源:互联网 发布:网络错误404是怎么办 编辑:程序博客网 时间:2024/06/15 12:48
一
int a;
int b = &a;
a、b指向同一个内存地址,对a的操作等同于对b的操作。
int a;
int *b = &a;
b中储存的是a的地址。对(*b)的任何操作相当于对a的操作
二
void Exchg1(int x, int y) { int tmp; tmp=x; x=y; y=tmp; printf("Exchg1:x=%d,y=%d\n",x,y);}void Exchg2(int &x, int &y) { int tmp; tmp=x; x=y; y=tmp; printf("Exchg2:x=%d,y=%d\n",x,y);}void Exchg3(int *x, int *y) { int tmp; tmp=*x; *x=*y; *y=tmp; printf("Exchg3:x=%d,y=%d\n",*x,*y);} void main(){ int a=4,b=6; Exchg1 (a,b) ; printf("a=%d,b=%d\n",a,b); Exchg2 (a,b); printf("a=%d,b=%d\n",a,b); Exchg3(&a,&b) ; printf("a=%d,b=%d\n",a,b);}
这里Exchg1函数被调用的时候,并没有成功交换a跟b的数据。为何呢。
int a=4,b=6;
Exchg1 (a,b) ; //这里本质上发生的是:Exchg1 (intx=a,int y=b) ; x跟y是函数定义里面的形参,也就是说这里只是把实参a跟b的值赋予了x,y这2个形参变量。接下来,函数里发生的值互换只换掉了x跟y的值,而实参a跟b没有影响。
再看Exchg2 (a,b); //再看本质Exchg2 (int &x=a,int &y=b); 这里x跟y都是a,b的引用,操作x跟y交换就等于a跟b交换,自然,调用Exchg2 可以成功交换a跟b
Exchg3(&a,&b) ; //Exchg3(int *x=&a,int *y=&b); x跟y2个形参是a跟b的指针,也就是实参数据存放的地址。然后函数里交换了x跟y指向的数据,也就是实参a跟b,所以,交换也是成功的。
代码运行的结果,exchg1没有交换a,b值;exchg2交换了a,b值,到了exchg,a,b的值似乎没有交换,仍旧是a为4,b为6,刚开始以为代码有问题,后来设置了断点之后,发现代码运行到exchg3(&a,&b)时,a=6,b=4了,所以代码运行结果和初始值一样的话,说明已经交换了a,b的值,至此说明代码是没有任何问题的。
阅读全文
0 0
- 取址符的作用
- 作用域::的作用
- 作用域的作用
- ::的作用
- !!的作用
- Spring的作用、Struts的作用、Hiberante的作用
- 电容的作用?电容器的作用?
- 电话交换机的作用,程控交换机的作用
- 电容的作用?电容器的作用?
- 网络地址的作用,子网掩码的作用
- enum的作用以及主要的作用
- JavaScript 的 “-” 的作用
- 变量的作用功能、作用域和作用形态
- Spring的作用域以及RequestContextListener作用
- Spring的作用域以及RequestContextListener作用
- Spring的作用域以及RequestContextListener作用
- 作用域,闭包的作用
- Spring的作用域以及RequestContextListener作用
- Sass的@if指令
- 某文件不在sudoers 中
- linux下install命令和cp命令的区别
- Python json 第三方库Demjson安装
- TeamTalk源码分析(六) —— 服务器端login_server源码分析
- 取址符的作用
- 事务并发解决方案
- mysql计算两个日期相减的方式
- arm汇编知识点
- 【机器学习】回归
- (Java ) ISBN号码
- Eclipse中安装和使用CheckStyle
- TLD 详细解析之 跟踪器
- kotlin 官方学习教程之语法