结构体的定义使用 struct
关键字,其基本语法如下:
struct 结构体名 {
数据类型 成员1;
数据类型 成员2;
// 可以有更多成员
}variable-list;
例如,定义一个表示学生信息的结构体:
struct Student {
char name[50];
int age;
float score;
}variable-list;
述代码定义了一个名为 Student
的结构体,它包含三个成员:一个字符数组 name
用于存储学生姓名,一个整型变量 age
用于存储学生年龄,一个浮点型变量 score
用于存储学生成绩。
定义好结构体后,可以声明该结构体类型的变量。有以下几种声明方式:
struct Student
{
char name[50];
int age;
float score;
};
int main()
{
struct Student stu1; // 声明一个 Student 类型的变量 stu1
return 0;
}
struct Student
{
char name[50];
int age;
float score;
} stu2; // 声明一个 Student 类型的变量 stu2
int main()
{
// 使用 stu2
return 0;
}
struct
{
char name[50];
int age;
float score;
} stu3; // 声明一个匿名结构体类型的变量 stu3
int main()
{
// 使用 stu3
return 0;
}
结构体变量可以在声明时进行初始化,有以下几种初始化方式:
#include
struct Student
{
char name[50];
int age;
float score;
};
int main()
{
struct Student stu = {"Alice", 20, 85.5};
printf("姓名: %s, 年龄: %d, 成绩: %.2f\n", stu.name, stu.age, stu.score);
return 0;
}
#include
struct Student
{
char name[50];
int age;
float score;
};
int main()
{
struct Student stu = {.name = "Bob", .score = 90.0, .age = 21};
printf("姓名: %s, 年龄: %d, 成绩: %.2f\n", stu.name, stu.age, stu.score);
return 0;
}
可以使用点运算符(.
)来访问结构体变量的成员。例如:
#include
#include
struct Student
{
char name[50];
int age;
float score;
};
int main()
{
struct Student stu;
strcpy(stu.name, "Charlie");
stu.age = 19;
stu.score = 78.5;
// 结构体变量.结构体成员名
printf("姓名: %s, 年龄: %d, 成绩: %.2f\n", stu.name, stu.age, stu.score);
return 0;
}
结构体数组是由多个相同结构体类型的元素组成的数组。例如:
#include
struct Student
{
char name[50];
int age;
float score;
};
int main() {
struct Student students[3] = {
{"David", 22, 88.0},
{"Eve", 20, 92.5},
{"Frank", 21, 76.0}
};
for (int i = 0; i < 3; i++)
{
printf("姓名: %s, 年龄: %d, 成绩: %.2f\n", students[i].name, students[i].age, students[i].score);
}
return 0;
}
可以定义指向结构体的指针,通过指针访问结构体成员时需要使用箭头运算符(->
)。例如:
#include
#include
struct Student
{
char name[50];
int age;
float score;
};
int main()
{
struct Student stu = {"Grace", 23, 89.5};
struct Student *p = &stu;
printf("姓名: %s, 年龄: %d, 成绩: %.2f\n", p->name, p->age, p->score);
return 0;
}
结构体可以作为函数的参数进行传递,有值传递和地址传递两种方式。
#include
struct Point
{
int x;
int y;
};
// 函数接受结构体值作为参数
void printPoint(struct Point p)
{
printf("坐标: (%d, %d)\n", p.x, p.y);
}
int main()
{
struct Point pt = {3, 5};
printPoint(pt);
return 0;
}
#include
struct Point
{
int x;
int y;
};
// 函数接受结构体指针作为参数
void modifyPoint(struct Point *p)
{
p->x = 10;
p->y = 20;
}
int main()
{
struct Point pt = {3, 5};
modifyPoint(&pt);
printf("修改后的坐标: (%d, %d)\n", pt.x, pt.y);
return 0;
}