首页 新闻 会员 周边

谁能说一下指向对象的指针代表什么意思呢?

-1
悬赏园豆:5 [待解决问题]
class Person
{
private :
       int age;
       char* name;
public :
       Person()
                {
                       name=new char[20];
                       age=18; 
                 }
}

现在我实例化一个变量

Person *p=new Person();

p代表的是一个Person的地址。我们都知道在数组中,指针代表的是数组的首地址。那么p代表的地址的意义是什么呢?是age的地址吗?是name的地址吗?编译器又是怎么根据p的地址找到对象的age和name的呢?

c++ c
mcfer的主页 mcfer | 初学一级 | 园豆:144
提问于:2015-06-30 12:49
< >
分享
所有回答(7)
-1
Launcher | 园豆:45045 (高人七级) | 2015-06-30 13:04
0

指针就是指针,有什么好纠结的。指针指向一块内存区域,让系统能找到这块内存。

指针的类型,描述这块区域的数据结构,然系统能用使用这块内存。

吴瑞祥 | 园豆:29449 (高人七级) | 2015-06-30 13:23
0
Person *p=new Person();

内存中开辟一块新空间,用来存放Person实例

p指向这个空间的起始地址,而不是内部变量(name或age)的地址

访问变量应该用p->name或*p.name

你可以试着输出p的值看看,存的既然是地址,根据地址当然能找到存放的东西

菊草叶与圆企鹅 | 园豆:233 (菜鸟二级) | 2015-06-30 14:02
0

首先你要了解一个很基本的概念:指针也是个变量而且是整形的变量,指针跟大多数我们定义的变量不同点在于指针存储的是一个地址(这个地址可以指向任何一个有效的对象或者空) ,而我们一般变量存储的是数据内容或者一个引用。

如上例 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: 上面只是一个说明,实际中类在内存的存储结构并不可能是这样的

visonme | 园豆:1674 (小虾三级) | 2015-07-01 08:57

我懂了,其实p存的就是&age;

如果类的定义为char *name;int age;

那么p存的便是&name;

支持(0) 反对(0) mcfer | 园豆:144 (初学一级) | 2015-07-01 23:18
0

首先你new的是Preson对象而不是对象数组,对象数组new person[3]::用[]

,定义变量就要分配空间,就会有这个空间的地址,想要对p这个空间操作就需要p的地址了,

例如:new 出来的要delete p;如过p没有地址就无法删除

啥都别说了 | 园豆:202 (菜鸟二级) | 2015-07-24 22:26
0

p指向的是为类分配的一块地址,这块地址里面有类中的属性

rollwike | 园豆:202 (菜鸟二级) | 2015-09-08 20:59
0

建议看C++对象模型,此函数没有虚函数,不存在虚函数表,对象的地址应该是第一个数据成员的地址 age的。

黑桃七 | 园豆:268 (菜鸟二级) | 2015-09-20 21:48
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册