C语言结构体struct详解
什么是结构体?
在C语言中,结构体是一种用户自定义的数据类型,它可以将不同的数据类型组合在一起形成一个新的数据类型。结构体主要由结构体名、成员和符号构成。
使用结构体可以方便地定义一些复杂的数据类型,例如表示一个学生信息的数据类型,可以包括姓名、学号、性别、年龄等信息。
结构体的定义和声明
结构体的定义通常放在函数外部,以便在整个程序中使用。一个结构体的定义由"struct"关键字、结构体名、左花括号、结构体的成员、右花括号组成,语法格式如下:
struct 结构体名 {
数据类型 成员1;
数据类型 成员2;
...
数据类型 成员n;
};
例如,下面是定义一个表示学生信息的结构体的示例:
struct student {
char name[20];
int id;
char gender;
int age;
};
定义结构体后,可以声明结构体变量,即为其分配内存空间,语法格式如下:
struct 结构体名 变量名;
例如,声明一个结构体变量s1表示一个学生的信息:
struct student s1;
结构体的初始化
结构体变量可以用以下两种方法进行初始化。
第一种方法:按顺序初始化
按照结构体定义的顺序对结构体变量进行初始化,语法格式如下:
struct student s1 = {"Tom", 1001, 'M', 18};
第二种方法:按成员名初始化
按照成员名对结构体变量进行初始化,语法格式如下:
struct student s1 = {.name = "Tom", .id = 1001, .gender = 'M', .age = 18};
结构体的访问
结构体变量的成员可以通过"."操作符进行访问,语法格式如下:
结构体变量名.成员名
例如,访问结构体变量s1的姓名:
printf("%s\n", s1.name);
结构体的嵌套
结构体也可以嵌套使用,将一个结构体作为另一个结构体的成员,语法格式如下:
struct A {
int a;
int b;
};
struct B {
char c;
struct A d;
};
例如,定义一个包含学生信息和成绩信息的结构体:
struct grade {
struct student s;
int math;
int english;
};
struct grade g = {.s = {"Tom", 1001, 'M', 18}, .math = 90, .english = 80};
结构体的指针
结构体变量的地址可以用"&"操作符获取。结构体的指针指向结构体变量的首地址,语法格式如下:
struct 结构体名 *指针名 = &结构体变量名;
例如,定义一个指向结构体变量s1的指针ps1:
struct student *ps1 = &s1;
指针也可以用于访问结构体的成员,语法格式如下:
指针变量名->成员名
例如,访问s1的年龄:
printf("%d\n", ps1->age);
示例说明
示例一:结构体的定义和访问
#include <stdio.h>
struct student {
char name[20];
int id;
char gender;
int age;
};
int main() {
struct student s1 = {"Tom", 1001, 'M', 18};
printf("%s %d %c %d\n", s1.name, s1.id, s1.gender, s1.age);
return 0;
}
输出结果为:
Tom 1001 M 18
示例二:结构体的嵌套和指针访问
#include <stdio.h>
struct student {
char name[20];
int id;
char gender;
int age;
};
struct grade {
struct student s;
int math;
int english;
};
int main() {
struct grade g = {.s = {"Tom", 1001, 'M', 18}, .math = 90, .english = 80};
struct student *ps = &(g.s);
printf("%s %d %c %d %d %d\n", ps->name, ps->id, ps->gender, ps->age, g.math, g.english);
return 0;
}
输出结果为:
Tom 1001 M 18 90 80
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言结构体struct详解 - Python技术站