C++绝对新手,关于用new创建动态结构数组,访问结构元素

#include<iostream>usingnamespacestd;structcar{charname[20];intyear;};intmain(){cout<<... #include <iostream>
using namespace std;
struct car
{
char name[20];
int year;
};
int main()
{
cout << "How many cars do you wish to catalog? ___\b\b\b";
int num;
cin >> num;
cin.get();
car * ps = new car [num];//创建动态数组,每个ps数组元素都是car结构
for (int i = 0; i < num; i++)
{
cout << "Car #" << i+1 << endl;
cout << "Enter the name: ";
cin.get(ps[i].name,20);//问题在这里
//动态结构应用->来访问,因为结构没有名称,此处用.访问,难道结构有名称?
//难道名称是数组?即ps[i]?
cout << "Enter the year: ";
cin >> ps[i].year;
cin.get();
}
cout << "after enter~\n";
for (int i = 0; i < num; i++)
{
cout << ps[i].year << " : " << ps[i].name << endl;
}
delete [] ps;
cin.get();
cin.get();
return 0;
}
问题就是注释里提到的,访问结构数组成员为什么用" . " ,二不用 - > ,求大神解释啊!!!
展开
 我来答
百度网友fefbf9e
2013-08-02 · TA获得超过1364个赞
知道小有建树答主
回答量:176
采纳率:0%
帮助的人:109万
展开全部
cin.get(ps[i].name,20);//问题在这里
//动态结构应用->来访问,因为结构没有名称,此处用.访问,难道结构有名称?
//难道名称是数组?即ps[i]?

首先,这个问题和new动态结构没有任何关系。c/c++里,通过对象访问成员用点“.",通过指针访问成员用"->",成员包括成员变量和成员函数,就是这么规定的。如果不明白对象和指针,往下看。

指针很好理解,就是内存地址,对象指针就是对象在内存中的起始地址,而对象就是内存中实际存在的那个实体,对象好比你家,指针好比你家的门牌地址。在这个问题中,ps[i]的意思就是取ps+i地址处的内容,也就是对象,如果换成ps+i,则要用(ps+i)->name,因为ps+1是指针
敏生是也
2013-08-01
知道答主
回答量:45
采纳率:0%
帮助的人:17.6万
展开全部
new 创建的对象返回的是数组的首地址 所以ps是地址也即是&ps[0]
再者数组名本身就表示数组的首地址如 int jk[10]; jk就表示该数组的首地址;
所以用ps-> 和用ps[]。不正是一个道理吗
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
sunchy12345678
2013-08-01 · TA获得超过665个赞
知道小有建树答主
回答量:443
采纳率:100%
帮助的人:351万
展开全部
怎么解释呢。。。
ps使用了[]运算符访问到的就是实际的对象啊。。。所以不需要->
如果类似这样
car* p[10];
for (int i = 0; i < 10; ++i)p[i] = new car;
p[i]访问到的是指针,所以要用->
解释的有点乱。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
转身后两相忘
2013-08-02 · 超过39用户采纳过TA的回答
知道答主
回答量:178
采纳率:0%
帮助的人:92万
展开全部
获取数组元素就应该用“.”啊 获取方法才应该用“->”吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式