VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 619|回复: 1

[交流] 关于C语音语法*和&的使用小总结

[复制链接]
96_avatar_middle
online_vip 发表于 2017-4-22 12:10:00 | 显示全部楼层 |阅读模式
void swap(int *p1,int *p2)
{     //p1 = 0x0012fa84        p2 = 0x0012fa78       
        int i = *p1;  //*p1 = 23      i = 23;
        *p1 = *p2;  //*p2 = 45      此时重点来了,当*p1是在"="号的前面,表示的含义是指针指向的数值(而不是地址)被赋值为45,如下图1
        *p2 = i;      //*p2表示的含义同图1
}
int main()
{
        int i,j;   
        i = 23;     //&i  = 0x0012fa84       
        j = 45;     //&j  = 0x0012fa78       
        swap(&i,&j);
}


void swap2(int &a1,int &a2)
{//此时,a1,a2的值分别是33,55。
        int t = a1;
        a1 = a2;
        a2 = t;
//上面的三个步骤执行完之后,a和b的数值会被互换,ri和rj的数值也会被互换。
}
int main()
{
        int a,b;
        a = 33;
        b = 55;
        int &ri = a;
        int &rj = b; //当执行到这一步的时候,看内存情况,如图2:
        // 如上面的情况,&ri和&rj 中的&在"="的前面,表示的含义是创建了2个别名,ri,rj。如果执行语句ri = 44;那么a的值也会是44
        CString stri;
        stri.Format(_T("%d"),ri);
        swap2(a,b);
        stri.Format(_T("%d"),ri);
}

也许有人会问了,上面的函数swap2(int &a1,int &a2),可以写成下面的模样吗?
swap2(int a1 ,int a2)
回答:这么编写可以,没有错误。但是,你传递的参数就变成了数值,那么a和b的数值不会互换,ri和rj的数值也是一样,不会互换。

图1

图1

图2

图2




上一篇:基于UDP的select函数用法
下一篇:关于using namespace 的解释
96_avatar_middle
ico_lz  楼主| 发表于 2017-4-22 12:14:17 | 显示全部楼层
不好意思,图1中文字部分有笔误,应该p1和p2调换,如下图:
123.png
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号tongdun|网站地图wx_jqr

GMT+8, 2019-5-27 16:27

Powered by Discuz! X3.4

© 2009-2019 cctry.com

快速回复 返回顶部 返回列表