弱智的问问

zhangzhongke007 2009-06-19 11:31:55

#include<iostream>
#include<fstream>
using namespace std;

class student
{
public:
void set(int n,char p[],float s)
{
number=n;
strcpy(name,p);
//name=p;
score=s;
}
void display()
{
cout<<"name:"<<name<<endl;
cout<<"number:"<<number<<endl;
cout<<"score:"<<score<<endl;
}
private:
int number;
char name[10];
float score;
};
void main()
{
student list[2];
student List[2];
fstream myfile;
char p[10];
int num=0;
float scor=0;
cout<<"please input the students' number name and score:";
for(int i=0;i<2;i++)
{
cin>>num>>p>>scor;
list[i].set(num,p,scor);
}
myfile.open("d:\\student.dat",ios::out|ios::binary);
if(!myfile.is_open())
{
cerr<<"something wrong has happend during the reading!"<<endl;
exit(0);
}
myfile.write((char *)List,sizeof(list));
myfile.write((char *)List,sizeof(list));
myfile.close();

cout<<"读取信息后为:"<<endl;
list[0].display();
list[1].display();

myfile.open("d:\\student.dat",ios::in|ios::binary);
myfile.read((char *)List,sizeof(list));
myfile.read((char *)List,sizeof(list));

myfile.close();

}

如程序中,为何不能用注释掉的形式来接收字符串啊?
...全文
110 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
jl0803 2009-06-23
  • 打赏
  • 举报
回复
高手啊
antss 2009-06-19
  • 打赏
  • 举报
回复
指针跟地址不是一回事.

地址可以做值.

指针的拥有值是一个地址并且指针有自己的地址.

简单的说,指针是存储其它变量的地址的容器,而且有自己的地址.

千万别把指针跟地址混为一谈.

flyfanta 2009-06-19
  • 打赏
  • 举报
回复
楼主,看来你对指针的认识还不够,指针存放的实地址,但是存放的地址是可以改变的,因此可以动态引用
但你定义的name[10]是一个数组,name存放的也是一个地址,但是其地址是固定的,指向内存中为name[10]分配的空间的第一个Byte,所以不能赋值
hbalyzbp 2009-06-19
  • 打赏
  • 举报
回复
都是高手。
MichaelBomb 2009-06-19
  • 打赏
  • 举报
回复
还有:

for(int i=0;i<2;i++)
{
cin>>num>>p>>scor;//score ,这里变量写错
list[i].set(num,p,scor);//score
}
lingyin55 2009-06-19
  • 打赏
  • 举报
回复
//name=p;字符数组不支持这种赋值操作。
只有在初始化的时候可以直接吧一串字符串赋值给数组。
不然只能用strcpy传数组首地址或者用for循环单个赋值。
机智的呆呆 2009-06-19
  • 打赏
  • 举报
回复
既然是c++可以考虑下,string
至善者善之敌 2009-06-19
  • 打赏
  • 举报
回复
一个是指向同一地址,一个是拷贝到另一地址
Walf_ghoul 2009-06-19
  • 打赏
  • 举报
回复
char p[]传递是指针,name接收是数组类型所以不能
song_0521 2009-06-19
  • 打赏
  • 举报
回复
字符处理要用字符串出来函数来做,看看string中的函数吧
Meteor_Code 2009-06-19
  • 打赏
  • 举报
回复
name是地址常量,P是地址变量,常量不能被赋值。因为这种常量根本没有内存地址给他,
你可以看看&name是多少,他还是name,也就是name==&name,但p!=&p
Jalien 2009-06-19
  • 打赏
  • 举报
回复
name是指针(代表数组起始地址),p传过来也退化为指针,指针赋给指针,lz应该明白了?
文刀劉Michael 2009-06-19
  • 打赏
  • 举报
回复
char p[]传递是指针,name接收是数组类型
指针是存储其它变量的地址的容器,而且有自己的地址.

指针存放的实地址,但是存放的地址是可以改变的,因此可以动态引用
但你定义的name[10]是一个数组,name存放的也是一个地址,但是其地址是固定的,
指向内存中为name[10]分配的空间的第一个Byte,

综上,不能赋值

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧