温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

c++的变量怎么用

发布时间:2022-01-17 14:21:15 来源:亿速云 阅读:127 作者:iii 栏目:大数据

今天小编给大家分享一下c++的变量怎么用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

变量名:程序员给地址取的外号

上学的时候,老师讲变量是存在内存中的,内存就像一排排抽屉组成的,每个抽屉上面有个编号,我们定义一个变量,就是把想放的东西放到这个对应编号的抽屉里。比如: int a = 10,用图来表示下:

c++的变量怎么用

这里:变量的名字叫 a ,变量的值是:10,变量的地址是:0x 00000001
那么问题来了,变量的值我们知道是放在了抽屉里(内存中),每个抽屉有编号(地址),但是变量的名字 a 存放在哪里呢?或者说它会存在于内存中吗?

大家想一个问题,如果变量的名字要存放在内存中,那么肯定分配一个空间给它,保存它的空间有个地址,这个地址是不是又得有个地方存起来程序才能找到?如果真是这样设计,那么代码根本没发写、无法运行了。

其实变量名仅仅是写给程序员看的,让我们写代码的时候知道这个变量有什么用,能够通过名字调用变量的值。因为如果直接给你一个地址 0x 23004123,你知道这是要干嘛吗?代码经过编译后,最终都会转换成机器码,我们定义的变量名就都不存在了,存在的只有地址跟值。

指针其实很普通

有了上面的理解,再来一个特殊的变量:指针变量。什么叫指针变量呢?其实就是这个变量里边存放的是一个变量的地址,通过这个地址,机器可以找到对应变量的值,例如:int * pa = &a,就表示变量 pa 抽屉里放的是 a 的地址,它的类型是:int*,继续看图:

c++的变量怎么用

这里需要重要说明的是:指针pa与a的关系是:a抽屉里边放的是变量值10,pa放的是变量的地址:0x00000001,这里一定要记住,下面说引用的时候才更容易理解。

引用就是变量的另一名字

继续谈引用,引用与指针我们经常傻傻分不清,因为它们的行为确实非常诡异,看起来效果非常相似,看代码:

由于引用的概念是在 c++ 中引入的,因此下面的代码使用c++,仅仅是一些打印而已,放心看下去

int main() {
   int a = 10;// 变量    int * pa = &a; // 指针    int & b = a; // 引用    printf("a: %d\n", a);// a: 10    printf("*pa: %d\n", *pa);// *pa: 10    printf("b: %d\n", b);// b: 10    *pa = 20;
   printf("a: %d\n", a);// a: 20    printf("*pa: %d\n", *pa);// *pa: 20    printf("b: %d\n", b);// b: 20    b = 30;
   printf("a: %d\n", a);// a: 30    printf("*pa: %d\n", *pa);// *pa: 30    printf("b: %d\n", b);// b: 30    a = 40;
   printf("a: %d\n", a);// a: 40    printf("*pa: %d\n", *pa);// *pa: 40    printf("b: %d\n", b);// b: 40    return 0; }

通过上面的代码我们发现,指针与引用都能达到一个效果:都有能力修改a的值,指针前面讲过了,因为它保存了a的地址,通过解引用操作后,实际上就是打开了a的抽屉,因此可以进行修改。那么引用又是怎么办到的?这里注意一个细节:*pa = 20; c = 30;a = 40。我们看到操作c的时候与操作a是一样的方式:直接使用变量名,但是pa要想改变a的值,必须进行 *pa 操作(解引用),如果直接 pa=20,这仅仅是改变的pa的值,让他指向了另外一个地址。

为什么引用与变量是一样的操作方式?先来看一下引用的定义:

引用就是某一变量的一个别名,对引用的操作与对变量直接操作完全一样。

那么别名是什么意思呢?

c++的变量怎么用

看到了吧?a就是b,b就是a。系统并不会为引用额外分配空间进行存储,甚至可以简单理解为:这个别名仅仅是为了给程序员看的,到机器码层面的时候,他们都会变成地址:0x 00000001。

有码为证

通过上面的分析不知道你理解了几分?或者你是不是对指针与引用还是半信半疑?没关系,写点代码证明一下即可,我们要证明的是:

  • 引用是变量的别名,那么它的地址应该与变量一致;

  • 指针保存的是变量的地址,那么它的值是变量的地址,它自身的地址与变量不同。

为了证明,程序设计如下:定义一个变量,分别赋值给指针、引用,然后检查他们对应的值与地址。

int main() {
   int a = 10;
   printf("%d\n", a);
   printf("%p\n", &a);
   
   printf("~~~~~~~~~~~~~~\n");
   int * b = &a;
   printf("%p\n", b);
   printf("%p\n", &b);
   
   printf("~~~~~~~~~~~~~~\n");
   int & c = a;
   printf("%d\n", c);
   printf("%p\n", &c);
   
   return 0; }

获得输出:

10 // 变量a的值
0x7ffee3c7a768 // 变量a的地址
~~~~~~~~~~~~~~
0x7ffee3c7a768 // 指针的值,是变量a的地址
0x7ffee3c7a760 // 指针变量自己的地址
~~~~~~~~~~~~~~
10 // 变量a的值
0x7ffee3c7a768 // 引用变量c的地址,与变量a的地址完全一样

在上面如果指针想要打印变量a的值,需要解引用操作:printf("%d\n", *b);

小结

  • 变量由三分部分构成:变量名、变量值、变量地址;

  • 变量名实际上只是给程序员看的,编译后的代码中并不存在变量名;

  • 指针变量就是一个变量存储了另外一个变量的地址,系统也会为他分配内存空间来存储这个地址;

  • 引用实际是变量的别名,他跟变量有相同的地址。

以上就是“c++的变量怎么用”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注亿速云行业资讯频道。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

c++
AI