帮忙看下结构体中的问题

zhouliang0806 2011-04-28 04:45:21
下面程序中,就一段代码移了一下位置,结果出了问题,帮忙解决解决。
#include "stdio.h"
#include "string"
//#include "iostream.h"


void main()
{
struct student
{
int id;
char* name;
double goal;
};

student a[2];
a[2]={{1,"zhangsan",80.9},{2,"lisi",90.1}}; //这个有问题

printf("%d,%s,%f",a[1].id,a[1].name,a[1].goal);
// system(PAUSE);
}


#include "stdio.h"
#include "string"
//#include "iostream.h"


void main()
{
struct student
{
int id;
char* name;
double goal;
};

student a[2]={{1,"zhangsan",80.9},{2,"lisi",90.1}};//这个却可以运行

printf("%d,%s,%f",a[1].id,a[1].name,a[1].goal);

}

谁能解释下
...全文
139 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
honglian 2011-04-29
  • 打赏
  • 举报
回复
使用动态创建数组,需要时动态分配内存,使用完后释放内存,假如你的程序所需要的student数最大不超过10000,而现在只需要两个

void main()
{
struct student
{
int id;
char* name;
double goal;
};

//student a[2] = {{1,"zhangsan",80.9},{2,"lisi",90.1}};
//a[2]={{1,"zhangsan",80.9},{2,"lisi",90.1}}; //这个有问题
student *a[10000];
for(int i=0; i<2; i++) //分配内存
a[i] = new student();

a[0]->id = 1;
a[0]->name = "zhangsan";
a[0]->goal = 80.9;

a[1]->id = 2;
a[2]->name = "lisi";
a[3]->goal = 90.1;

for(int j=0; j<2; j++) //释放内存
delete []a[j];
delete []a;

printf("%d,%s,%f",a[1].id,a[1].name,a[1].goal);
// system(PAUSE);
}
honglian 2011-04-29
  • 打赏
  • 举报
回复
输入字符串要用cin.getline()函数,还有释放内存那里也修改了下

#include <iostream>

using namespace std;

struct student
{
int id;
string name;
double goal;
};

void main()
{

student *a[10];
for(int i=0;i<3;i++)
{
a[i]=new student();
cout<<"input id:"<<endl;
cin>>a[i]->id;

cout<<"input name:"<<endl;
char name[200];
cin.getline(name,sizeof(name), 'a'); //定义a字符为结束标识符

cout<<"input goal:"<<endl;
cin>>a[i]->goal;
}
//printf("%d,%s,%f",a[0]->id,a[0]->name,a[0]->goal);
for(int j=0; j<3; j++) //释放内存
delete a[j];
}

楼主多看看书吧,都是基础知识
海盗医生 2011-04-29
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 zhangyuehua123 的回复:]
引用 1 楼 bdmh 的回复:
{{1,"zhangsan",80.9},{2,"lisi",90.1}}; 这种形式要用在初始化时,不能对数组赋值时使用


正解!
[/Quote]
是这个理
zhouliang0806 2011-04-29
  • 打赏
  • 举报
回复
我也使用了动态数组的方法,通过自己输入的方法初始化,为什么会内存出错?
#include "stdio.h"
#include "string"
#include "iostream.h"
void main()
{
struct student
{
int id;
char* name;
double goal;
};
student *a[10];
for(int i=0;i<10;i++)
{
a[i]=new student();
cout<<"input id:"<<endl;
cin>>a[i]->id;
cout<<"input name:"<<endl;
cin>>a[i]->name;
cout<<"input goal:"<<endl;
cin>>a[i]->goal;
}
printf("%d,%s,%f",a[0]->id,a[0]->name,a[0]->goal);
for(int j=0; j<10; j++) //释放内存
delete []a[j];
delete []a;
}
zhouliang0806 2011-04-28
  • 打赏
  • 举报
回复
如果我的结构体数组开始是不知道大小的,比如一个仿真数据的结构体,是随着时间一个一个生成的,那么有什么好的方法开始来定义这个结构体呢?
honglian 2011-04-28
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 zhouliang0806 的回复:]
我如果要定义一个结构体数组,然后再一个一个赋值,怎么修改?
不要开始初始化。
[/Quote]

改为如下:

void main()
{
struct student
{
int id;
char* name;
double goal;
};

//student a[2] = {{1,"zhangsan",80.9},{2,"lisi",90.1}};
//a[2]={{1,"zhangsan",80.9},{2,"lisi",90.1}}; //这个有问题
student a[2];
a[0].id = 1;
a[0].name = "zhangsan";
a[0].goal = 80.9;

a[1].id = 2;
a[2].name = "lisi";
a[3].goal = 90.1;

printf("%d,%s,%f",a[1].id,a[1].name,a[1].goal);
// system(PAUSE);
}
zhouliang0806 2011-04-28
  • 打赏
  • 举报
回复
我如果要定义一个结构体数组,然后再一个一个赋值,怎么修改?
不要开始初始化。
zhangyuehua123 2011-04-28
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 bdmh 的回复:]
{{1,"zhangsan",80.9},{2,"lisi",90.1}}; 这种形式要用在初始化时,不能对数组赋值时使用
[/Quote]

正解!
l523669057 2011-04-28
  • 打赏
  • 举报
回复
这不是结构体的问题,是数组初始化问题
l523669057 2011-04-28
  • 打赏
  • 举报
回复
a[2]={{1,"zhangsan",80.9},{2,"lisi",90.1}};
你这是把 = 号后面那些赋值给数组a第二个元素,能不错吗?
就想叫yoko 2011-04-28
  • 打赏
  • 举报
回复
student a[2];
a[2]={{1,"zhangsan",80.9},{2,"lisi",90.1}}; //这个有问题

此时a[2]代表的是一个student结构体
KID_coder 2011-04-28
  • 打赏
  • 举报
回复
a[2]={{1,"zhangsan",80.9},{2,"lisi",90.1}}; //这个有问题

a[2]是一个student类型的结构体~不是数组 你这样赋值会会出问题

student a[2]={{1,"zhangsan",80.9},{2,"lisi",90.1}};//这个却可以运行
这个代表把student类型的数组a赋值前两个元素~
bdmh 2011-04-28
  • 打赏
  • 举报
回复
{{1,"zhangsan",80.9},{2,"lisi",90.1}}; 这种形式要用在初始化时,不能对数组赋值时使用

64,637

社区成员

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

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