变量地址:C++永恒的话题,与一位家长的交流

2022-08-27 已有0人阅读 作者: IT航班

//第一种      C++开辟,省事,但是效率低。

Person  p;   //系统开辟空间

无标题2.png


//第二种      程序员开辟,效率高,灵活,但是不安全。

Person  *p  =  new Person

int         *m = new int;

无标题3.png


//第三种:用一个个体保存另外一个个体的地址。

Person *p1 = new Person;   //这个个体在内存中的地址是p1;

Person *p2 = p1;                  //p2保存了p1的地址。


Person  p3;                           //p3在内存中的地址是&p3;//系统开辟的加&符号

Person *p4  = &p3;             //p4保存了p3的地址。

无标题4.png


用int举例:

int    a      = 1;

int    *p1  = &a;            //p1保存了a在内存中的地址。

int    *p2  = new int;    //p2在内存地址是p2;

int   *p3   = p2;            //p3保存了p2的地址。



对于个体(变量),我们只关注两个方面:A、 一个是它的地址(内存编号),B、一个是地址中的值。 


自己开辟的, 

int  *p  =  new int;

*p=123;  


设计C++的人说:

A、把p当做它的地址(内存编号)

B、把*p,当做该内存编号中存放的值。


这样两个都有了。再出现&p就没有意义了,关键是两个都有了,所有才没有意义。


如果设计C++的人,最初规定:

int *p = new int;


设计的人,如果是这样定义地址的:

&p是该个体在内存中的地址的话。


那么我们今天就认为&p是地址了,

关键是设计C++的人没有最开始这样设计。人家对于自己开辟的,就是用p来表示在内存中的编号的

无标题5.png



无标题10.png