结构体的定义及初始化
?结构体类型定义
struct [结构体名]
{
类型标识符成员名;
类型标识符成员名;
…………….
};成员类型可以是基本型或构造型
struct是关键字,不能省略合法标识符
可省:无名结构体
结构体的说明及结构体变量的定义
例struct student
{ int num;
char name[20];
char sex;
int age;
float score;
char addr[30]; };
name
num
sex
age
score
addr
2字节
2字节
20字节
1字节
4字节
30字节
…
…..
结构体类型定义描述结构
的组织形式,不分配内存
例子图解
?结构体类型定义
struct [结构体名]
{
类型标识符成员名;
类型标识符成员名;
…………….
};成员类型可以是基本型或构造型
struct是关键字,不能省略合法标识符
可省:无名结构体
结构体的说明及结构体变量的定义
(1) 在结构体说明的同时定义结构体变量,例如:struct example
{ char *name;
int age;
}guo,zhang;(2)直接定义结构体变量,例如:
struct
{char *name;
int age;
}guo,zhang
未给
出结
构体
名
(3) 把定义和说明分开,例如:struct example
{ char *name;
int age;
};
struct example guo,zhang;结构体变量占用内存的大小可用sizeof()运算来求出
?结构体变量的定义
结构体的说明及结构体变量的定义?变量说明形式
struct 结构体名结构体变量名;
?注意:
结构变量的存储类型概念、它的寿命、可见
性及使用范围与普通变量、数组等完全一致。
结构体变量说明必须在结构类型定义之后,
二者也可同时进行。
引用规则
?结构体变量不能整体引用,只能引用变量成员可以将一个结构体变量赋值给另一个结构体变量结构体嵌套时逐级引用
成员(分量)运算符优先级: 1
结合性:从左向右
引用方式:
结构体变量名.成员名
?不能将一个结构体变量作为一个整体加以引用,而只能对结构体变量中各个成员进行引用
如:printf(“ …”,student1);(错误)
对成员变量可以象普通变量一样进行各种运算成员地址与结构体地址都可以引用,如:
scanf(“ %d”,&student1.num); … 它是成员地址引用printf(“ %d”,&student1); … 它是结构体地址引用
赋值时,与数组类似,只能当结构体变量为全局变量及静态变量时,可以赋值
形式一:struct 结构体名
{
类型标识符成员名;
类型标识符成员名;
…………….
};
struct 结构体名结构体变量={初始数据};
例struct student
{ int num;
char name[20];
char sex;
int age;
char addr[30];
};
struct student stu1={112,“Wang Lin”,…M?,19, “200 Beijing Road”};
形式二:
struct 结构体名
{
类型标识符成员名;
类型标识符成员名;
…………….
}结构体变量={初始数据};
例struct student
{ int num;
char name[20];
char sex;
int age;
char addr[30];
}stu1={112,“Wang Lin”,…M?,19, “200 Beijing Road”};
形式三:
struct
{
类型标识符成员名;
类型标识符成员名;
…………….
}结构体变量={初始数据};
例struct
{ int num;
char name[20];
char sex;
int age;
char addr[30];
}stu1={112,“Wang Lin”,…M?,19, “200 Beijing Road”};