C语言结构体数组的定义和赋值

希望对结构体赋值有心得的你们能来帮我解决一下这个问题:结构体数组的定义和赋值是不是只能用一条语句来完成?如果不是,为什么这样写是错误的
struct BookInformation book[30];
book[0]={"家春秋","巴金","小说","人民文学出版社","23272989",3};
book[1]={"C语言大学实用教程(第3版)","苏小红 孙志岗 陈惠鹏","","电子工业出版社","9787121165146",3};
这样提示的错误是:
error C2059: syntax error : '{'
如果是这样子:
struct BookInformation book[30]={{"C语言大学实用教程(第3版)","苏小红 孙志岗 陈惠鹏","","电子工业出版社","9787121165146",4},{"家春秋","巴金","小说","人民文学出版社","23272989",3}};
是可以运行成功的。

PS:如果我要定义一个结构体数组,数组的前几项在程序里赋值,后面的项通过用户赋值是否可行?

C99标准出来以前,C语言不支持动态定义数组大小,只能采用动态分配指针方式来完成动态数组的个数定义。如:
struct st {
int x,y;
char str[10];
};
struct st *array ;
int n;
printf("input n: "); scanf("%d", &n);
array=(struct st*)malloc(n*sizeof(struct st)); //动态分配n个结构体空间,接下来array的操作,与数组操作是相同的,如:array[0].x=1 ;
C99以后,C语言标准开始支持动态定义数组,但动态数组,在其确定个数之后,在其生命期中,就不可变了。如:

struct st {
int x,y;
char str[10];
};
int n;
printf("input n: "); scanf("%d", &n);
struct st array[n] ; //定义动态数组
array[0].x=1 ;
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2018-03-08
BookInformation *p= new BookInformation("家春秋","巴金","小说","人民文学出版社","23272989",3);
book[0]= *p;

//前提 你有有参数构造函数追问

所以如果分开赋值一定要再写一个构造函数吗?

追答

嗯,是的 你要用类变量赋值

追问

类变量?我不是很懂……C语言中真的有类变量吗?
那么如果没有构造函数就是必须定义赋值一条语句完成吗?

追答

我看成c++ 了
c的话 就是结构体变量

如果没有结构体变量
你可以对结构体成员 一个一个赋值

追问

那如果我要一次把所有成员都赋值呢?像这样:book[0]={"家春秋","巴金","小说","人民文学出版社","23272989",3};

追答

这样不行
可以在strcut 里面 定义构造函数
在赋值
BookInformation p= BookInformation("家春秋","巴金","小说","人民文学出版社","23272989",3);
book[0]= p;
这样就可以了

追问

那么,我还是要写一个构造函数。好的,谢谢你这么耐心!

追答

嗯,是的

本回答被提问者和网友采纳
相似回答