一、结构体变量的定义和初始化
结构体变量,是个变量,这个变量是若干个数据的集合。
注意:
- 在定义结构体变量之前首先得有结构体类型,然后在定义变量;
- 在定义结构体变量的时候,可以顺便给结构体变量赋初值,被称为结构体的初始化;
- 结构体变量初始化的时候,各个成员顺序初始化。
e.g.
#include <stdio.h>
//定义结构体类型
struct stu{
int id;
char name[32];
char sex;
int age;
//定义结构体变量之:定义结构体类型的同时定义结构体变量
}alice, lisa = {
1101, "Lisa_Wolf", 'F', 30};
//使用typedef对结构体类型取别名
typedef struct{
int a;
int b;
char c;
}MSG;
int main(int argc, char *argv[])
{
//定义结构体变量之:类型定义完毕之后定义变量
struct stu mary;
//结构体变量的初始化
struct stu Anna = {
1001, "安娜",'F',20};
//如果使用typedef对结构体类型取别名
//就无法在定义类型的同时定义结构体变量
//在定义结构体变量的时候不用加struct
MSG msg1, msg2 = {
100, 200, 'w'};
return 0;
}
二、结构体变量的使用
结构体变量对成员调用的方式:
结构体变量.结构体成员
注意:这地方说的结构体变量主要指的是普通结构体变量
结构体变量的简单使用
#include <stdio.h>
#include <string.h>
//定义结构体类型
struct stu{
int id;
char name[32];
char sex;
int age;
//定义结构体变量之:定义结构体类型的同时定义结构体变量
}Alice, lisa = {
1101, "Lisa_Wolf", 'F', 30};
//使用typedef对结构体类型取别名
typedef struct{
int a;
int b;
char c;
}MSG;
int main(int argc, char *argv[])
{
//定义结构体变量之:类型定义完毕之后定义变量
struct stu Mary;
//结构体变量的初始化
struct stu Anna = {
1001, "Anna Benz",'F',20};
//如果使用typedef对结构体类型取别名
//就无法在定义类型的同时定义结构体变量
//在定义结构体变量的时候不用加struct
MSG msg1, msg2 = {
100, 200, 'w'};
//结构体变量的使用
Alice.id = 1001;
strcpy(Alice.name, "Alice Granthm");
Alice.sex = 'F';
Alice.age = 20;
printf("%d - %s - %c - %d\n", Alice.id, Alice.name, Alice.sex, Alice.age);
printf("%d - %s - %c - %d\n", lisa.id, lisa.name, lisa.sex, lisa.age);
printf("%d - %s - %c - %d\n", Mary.id, Mary.name, Mary.sex, Mary.age);
printf("%d - %s - %c - %d\n", Anna.id, Anna.name, Anna.sex, Anna.age);
printf("%d - %d - %c\n", msg2.a, msg2.b, msg2.c);
return 0;
}
执行结果
在结构体中嵌套结构体
#include <stdio.h>
#include <string.h>
//在结构体中嵌套结构体
typedef struct{
int year;
int month;
int day;
}BD;
typedef struct{
int id;
char name[32];
BD birthday;
}Student;
void test2()
{
Student Anna;
Anna.id = 1101;
strcpy(Anna.name, "Anna Benz");
//如果结构体中嵌套结构体,赋值时找到最内层的成员再进行赋值
Anna.birthday.year = 2002;
Anna.birthday.month = 02;
Anna.birthday.day = 20;
printf("%d - %s - %d-%d-%d\n", Anna.id, Anna.name, Anna.birthday.year,Anna.birthday.month, Anna.birthday.day);
//嵌套的形式定义并初始化
Student Alice = {
1002, "Alice Klarkson", 2000, 3, 16};
printf("%d - %s - %d-%d-%d\n", Alice.id, Alice.name, Alice.birthday.year,Alice.birthday.month, Alice.birthday.day);
}
int main(int argc, char *argv[])
{
test2();
return 0;
}
执行结果
相同类型的结构体变量可以相互赋值
#include <stdio.h>
#include <string.h>
//在结构体中嵌套结构体
struct student{
int id;
char name[32];
char sex;
int age;
};
int main(int argc, char *argv[])
{
struct student Mary;
Mary.id = 1201;
strcpy(Mary.name, "Mary Branson");
Mary.sex = 'F';
Mary.age = 18;
printf("%d - %s - %c - %d\n",Mary.id, Mary.name, Mary.sex, Mary.age);
//相同类型的结构体变量之间可以直接赋值
struct student Lisa;
Lisa = Mary;
printf("%d - %s - %c - %d\n", Lisa.id, Lisa.name, Lisa.sex, Lisa.age + 1);
return 0;
}
执行结果