在C语言中,结构体是一种自定义的数据类型,它可以包含不同类型的数据成员,比如整型、字符型和数组等等。当定义了一个结构体类型后,可以使用这个类型定义一个结构体变量。而结构体变量后面的变量,通常指的是该结构体变量的成员变量。
举个例子,我们定义了一个包含姓名、年龄和学号信息的学生结构体:
struct student { char name[20];
int age;
char id[10];
};
然后我们定义一个名为Tom的学生结构体变量,它后面的变量就是该结构体变量的成员变量:
struct student Tom = {"Tom", 18, "001"};
结构体变量后面的变量有以下几个特点:
1、结构体变量后面的变量的类型通常是该结构体中定义的成员变量的类型;
2、结构体变量后面的变量的值通常是该结构体中定义的成员变量的值;
3、结构体变量后面的变量可以通过结构体成员访问运算符"."来访问该结构体的各个成员变量;
4、结构体变量的内存布局是连续的,也就是说,结构体变量中的各个成员变量是按照定义的顺序依次存放的。
定义结构体后面的变量有以下几种方式:
1、使用结构体成员访问运算符"."来访问该结构体的各个成员变量,例如:
Tom.age = 19;printf("Tom's name is %s, age is %d, id is %s\n", Tom.name, Tom.age, Tom.id);
2、使用指向结构体的指针来访问结构体的成员变量,例如:
struct student *p = &Tom;p->age = 20;
printf("Tom's name is %s, age is %d, id is %s\n", Tom.name, p->age, Tom.id);
3、使用结构体指针数组来访问多个结构体变量的成员变量,例如:
struct student stu[3] = { {"Tom", 18, "001"},
{"Jerry", 19, "002"},
{"Mike", 20, "003"},
};
for (int i = 0; i < 3; i++) {
printf("%s's age is %d, id is %s\n", stu[i].name, stu[i].age, stu[i].id);
结构体后面的变量在数据传递中经常被用到,它可以作为参数传递给函数,传递的是结构体变量的地址。这样可以避免结构体变量本身过大,影响函数栈的大小。
举个例子,假设我们有一个函数printStudent(),用于打印一个学生结构体变量的信息,它的参数是一个指向学生结构体的指针:
void printStudent(struct student *p) { printf("%s's age is %d, id is %s\n", p->name, p->age, p->id);
然后我们可以定义一个学生结构体变量Tom,将它的地址作为参数传递给printStudent()函数:
struct student Tom = {"Tom", 18, "001"};printStudent(&Tom);
通过这种方式,我们可以在函数中访问并修改该结构体变量的成员变量。