
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;
}
问题就是注释里提到的,访问结构数组成员为什么用" . " ,二不用 - > ,求大神解释啊!!! 展开
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;
}
问题就是注释里提到的,访问结构数组成员为什么用" . " ,二不用 - > ,求大神解释啊!!! 展开
4个回答
展开全部
cin.get(ps[i].name,20);//问题在这里
//动态结构应用->来访问,因为结构没有名称,此处用.访问,难道结构有名称?
//难道名称是数组?即ps[i]?
首先,这个问题和new动态结构没有任何关系。c/c++里,通过对象访问成员用点“.",通过指针访问成员用"->",成员包括成员变量和成员函数,就是这么规定的。如果不明白对象和指针,往下看。
指针很好理解,就是内存地址,对象指针就是对象在内存中的起始地址,而对象就是内存中实际存在的那个实体,对象好比你家,指针好比你家的门牌地址。在这个问题中,ps[i]的意思就是取ps+i地址处的内容,也就是对象,如果换成ps+i,则要用(ps+i)->name,因为ps+1是指针
//动态结构应用->来访问,因为结构没有名称,此处用.访问,难道结构有名称?
//难道名称是数组?即ps[i]?
首先,这个问题和new动态结构没有任何关系。c/c++里,通过对象访问成员用点“.",通过指针访问成员用"->",成员包括成员变量和成员函数,就是这么规定的。如果不明白对象和指针,往下看。
指针很好理解,就是内存地址,对象指针就是对象在内存中的起始地址,而对象就是内存中实际存在的那个实体,对象好比你家,指针好比你家的门牌地址。在这个问题中,ps[i]的意思就是取ps+i地址处的内容,也就是对象,如果换成ps+i,则要用(ps+i)->name,因为ps+1是指针
展开全部
new 创建的对象返回的是数组的首地址 所以ps是地址也即是&ps[0]
再者数组名本身就表示数组的首地址如 int jk[10]; jk就表示该数组的首地址;
所以用ps-> 和用ps[]。不正是一个道理吗
再者数组名本身就表示数组的首地址如 int jk[10]; jk就表示该数组的首地址;
所以用ps-> 和用ps[]。不正是一个道理吗
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
怎么解释呢。。。
ps使用了[]运算符访问到的就是实际的对象啊。。。所以不需要->
如果类似这样
car* p[10];
for (int i = 0; i < 10; ++i)p[i] = new car;
p[i]访问到的是指针,所以要用->
解释的有点乱。。
ps使用了[]运算符访问到的就是实际的对象啊。。。所以不需要->
如果类似这样
car* p[10];
for (int i = 0; i < 10; ++i)p[i] = new car;
p[i]访问到的是指针,所以要用->
解释的有点乱。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
获取数组元素就应该用“.”啊 获取方法才应该用“->”吧
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询