C语言结构体里的结构体怎么初始化
structstudentgrade{intnum;charname[9];structsubject{charsubname[20];inttime;intpoint;...
struct studentgrade{
int num;
char name[9];
struct subject{
char subname[20];
int time;
int point;
int mark;
}sub[4];
struct studentgrade *next;
};//结构体定义
这样初始化不行
struct studentgrade subject sub[4]={{"高级语言程序设计",20,4,0},{"高级语言程序设计",20,4,0},{"高级语言程序设计",20,4,0},{"高级语言程序设计",20,4,0},{"高级语言程序设计",20,4,0}};
老是出现error C2146: syntax error : missing ';' before identifier 'sub'
fatal error C1004: unexpected end of file found
这两个错误
请问怎么才能初始化 展开
int num;
char name[9];
struct subject{
char subname[20];
int time;
int point;
int mark;
}sub[4];
struct studentgrade *next;
};//结构体定义
这样初始化不行
struct studentgrade subject sub[4]={{"高级语言程序设计",20,4,0},{"高级语言程序设计",20,4,0},{"高级语言程序设计",20,4,0},{"高级语言程序设计",20,4,0},{"高级语言程序设计",20,4,0}};
老是出现error C2146: syntax error : missing ';' before identifier 'sub'
fatal error C1004: unexpected end of file found
这两个错误
请问怎么才能初始化 展开
7个回答
展开全部
方法是在定义变量的同时给其一初始值。结构体变量的初始化,遵循相同的规律。
简单变量的初始化形式如下:
数据类型 变量名=初始化值;
例如,定义整型变量a,并给其初始化值10的语句如下
int a=10;
数组的初始化,需要通过一常量数据列表,对其数组元素分别进行初始化,形式如下:
数据类型 数组名称〔数组长度〕={初始化值1,初始化值2,…, 初始化值n};
例如,定义长度为5的整型数组,并对其初始化的语句如下:
int A[5]={20,21,0,3,4};
结构体变量的初始化方式与数组类似,分别给结构体的成员变量以初始值,而结构体成员变量的初始化遵循简单变量或数组的初始化方法。具体的形式如下:
struct 结构体标识符
{
成员变量列表;
…
};
struct结构体标识符 变量名={初始化值1,初始化值2,…, 初始化值n };
例如,定义struct Point类型变量,并初始化的语句如下:
struct Point oP1={0.0,0.2,0.3};
struct Point类型变量oP1的三个成员变量的值分别为
oP1.x=0.0,
oP1.y=0.2
oP1.z=0.3
由于定义结构体变量有三种方法,因此初始化结构体变量的方法对应有三种,上面已经介绍了其中的一种形式,其他两种形式如下:
struct Point
{
double x;
double y;
double z;
} oP1={0.0,0.2,0.3}; struct
{
double x;
double y;
double z;
} oP1={0.0,0.2,0.3};
在初始化结构体变量时候,既可以初始化其全部成员变量,也可以仅仅对其中部分的成员变量进行初始化。例如:
struct Student
{
long id;
char name[20];
char sex;
}a= {0};
其相当于a.id=0;a.name=“”;a.sex=‘\0x0’。
仅仅对其中部分的成员变量进行初始化,要求初始化的数据至少有一个,其他没有初始化的成员变量由系统完成初始化,为其提供缺省的初始化值。
简单变量的初始化形式如下:
数据类型 变量名=初始化值;
例如,定义整型变量a,并给其初始化值10的语句如下
int a=10;
数组的初始化,需要通过一常量数据列表,对其数组元素分别进行初始化,形式如下:
数据类型 数组名称〔数组长度〕={初始化值1,初始化值2,…, 初始化值n};
例如,定义长度为5的整型数组,并对其初始化的语句如下:
int A[5]={20,21,0,3,4};
结构体变量的初始化方式与数组类似,分别给结构体的成员变量以初始值,而结构体成员变量的初始化遵循简单变量或数组的初始化方法。具体的形式如下:
struct 结构体标识符
{
成员变量列表;
…
};
struct结构体标识符 变量名={初始化值1,初始化值2,…, 初始化值n };
例如,定义struct Point类型变量,并初始化的语句如下:
struct Point oP1={0.0,0.2,0.3};
struct Point类型变量oP1的三个成员变量的值分别为
oP1.x=0.0,
oP1.y=0.2
oP1.z=0.3
由于定义结构体变量有三种方法,因此初始化结构体变量的方法对应有三种,上面已经介绍了其中的一种形式,其他两种形式如下:
struct Point
{
double x;
double y;
double z;
} oP1={0.0,0.2,0.3}; struct
{
double x;
double y;
double z;
} oP1={0.0,0.2,0.3};
在初始化结构体变量时候,既可以初始化其全部成员变量,也可以仅仅对其中部分的成员变量进行初始化。例如:
struct Student
{
long id;
char name[20];
char sex;
}a= {0};
其相当于a.id=0;a.name=“”;a.sex=‘\0x0’。
仅仅对其中部分的成员变量进行初始化,要求初始化的数据至少有一个,其他没有初始化的成员变量由系统完成初始化,为其提供缺省的初始化值。
展开全部
这样初始化理论上是可行的,你用的编译器应该是VC++6.0吧!主要是VC++6.0这个编译器不支持这样的初始化!只能一个一个初始化,比如sub[0].subject="高级语言程序设计",这样!
struct subject
{
string subname;//这个要改为string类型 因为char subname[20]不能一次性赋值只能一个一个赋值
int time;
int point;
int mark;
}sub[4];
int main()//一个结构体里面不能再定义另一个结构体
{
sub[0].subname="高级语言程序设计";
}
还有问题的话可以追问!
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
中间又有结构体嵌套,你的格式应该是{{ ..{}..},{..{}..},...}
其实一般不这么初始化,定义全局静态变量或者指针,指针的话通过malloc分配内存,然后通过->访问结构体成员,静态变量的通过.访问成员,然后赋值。
其实一般不这么初始化,定义全局静态变量或者指针,指针的话通过malloc分配内存,然后通过->访问结构体成员,静态变量的通过.访问成员,然后赋值。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
直接给结构体变量的成员赋值就行
比如
p.name="张三";
p.age=30;这样
另外,也可以一次性把所有成员的值全赋给结构体变量,不过跟数组一样要用大括号,比如
p={"张三",30};这样子
比如
p.name="张三";
p.age=30;这样
另外,也可以一次性把所有成员的值全赋给结构体变量,不过跟数组一样要用大括号,比如
p={"张三",30};这样子
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
struct studentgrade
{
int num;
char name[9];
char subname[20];
int time;
int point;
int mark;
}sub;
这样就可以了,用的时候sub.加上元素名就可以了 比如sub.num sub.name 这样就可以了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询