指针就是指针,有什么好纠结的。指针指向一块内存区域,让系统能找到这块内存。
指针的类型,描述这块区域的数据结构,然系统能用使用这块内存。
Person *p=new Person();
内存中开辟一块新空间,用来存放Person实例
p指向这个空间的起始地址,而不是内部变量(name或age)的地址
访问变量应该用p->name或*p.name
你可以试着输出p的值看看,存的既然是地址,根据地址当然能找到存放的东西
首先你要了解一个很基本的概念:指针也是个变量而且是整形的变量,指针跟大多数我们定义的变量不同点在于指针存储的是一个地址(这个地址可以指向任何一个有效的对象或者空) ,而我们一般变量存储的是数据内容或者一个引用。
如上例 p 保存的是一个内存地址,而这个地址执行是分给person内存的首地址,当我们要索引age和name的时候,其实内部可以理解是通过 P + num 来访问的,num是个整数表示一个变量占据的内存大小 ,例如我们假设上面的是采用顺序排列了,内存结构如下
=== int ==== char ====
p| age | name |
sizeof(int)
p保存的是首地址,而age和name变量也都是按上面在内存排列的,那么可以理解为p就是只想age因为都是位于首地址位置,而要访问name。那么就要 加上个age占据的内存大小,我们可以这样通过 p + sizeof( int) 来访问下name
ps: 上面只是一个说明,实际中类在内存的存储结构并不可能是这样的
我懂了,其实p存的就是&age;
如果类的定义为char *name;int age;
那么p存的便是&name;
首先你new的是Preson对象而不是对象数组,对象数组new person[3]::用[]
,定义变量就要分配空间,就会有这个空间的地址,想要对p这个空间操作就需要p的地址了,
例如:new 出来的要delete p;如过p没有地址就无法删除
p指向的是为类分配的一块地址,这块地址里面有类中的属性
建议看C++对象模型,此函数没有虚函数,不存在虚函数表,对象的地址应该是第一个数据成员的地址 age的。