C语言 struct 结构体超详细讲解
什么是C语言结构体?
C语言中的结构体是一种自定义数据类型,可以将多个不同数据类型的变量打包成一个整体,方便程序中的数据组织和管理。
结构体的语法如下:
struct 结构体名 {
数据类型1 变量名1;
数据类型2 变量名2;
...
数据类型n 变量名n;
};
其中,结构体名
是自定义的名称,可以根据需要进行修改。数据类型
可以是基本数据类型、数组、指针、其他结构体等。变量名
是结构体内部的成员变量,用于存储数据。
如何定义和使用结构体变量?
我们可以根据定义的结构体来创建结构体变量,示例代码如下:
struct Student {
char name[20];
int age;
float score;
};
int main() {
// 创建结构体变量
struct Student stu1;
// 初始化结构体变量
strcpy(stu1.name, "张三");
stu1.age = 18;
stu1.score = 88.5;
// 使用结构体变量
printf("姓名:%s,年龄:%d,分数:%f", stu1.name, stu1.age, stu1.score);
return 0;
}
在上面的示例代码中,我们定义了一个结构体 Student
,包含了一个字符数组 name
,一个整型变量 age
,和一个浮点数 score
。通过创建结构体变量 stu1
,并分别赋值给结构体成员变量,我们可以在程序中使用这个结构体变量,并通过成员访问符“.”来访问结构体成员。
结构体的嵌套和指针访问
结构体可以嵌套定义和使用,同时也可以通过指针访问结构体成员。示例代码如下:
struct Address {
char city[20];
char street[20];
};
struct People {
char name[20];
int age;
struct Address addr; // 嵌套结构体
};
int main() {
// 创建结构体变量并初始化
struct People p1 = {"张三", 18, {"广州", "天河路"}};
// 访问嵌套的结构体成员
printf("姓名:%s,年龄:%d,城市:%s,街道:%s", p1.name, p1.age, p1.addr.city, p1.addr.street);
// 创建指向结构体变量的指针
struct People *pp = &p1;
// 通过指针访问结构体成员
printf("姓名:%s,年龄:%d,城市:%s,街道:%s", pp->name, pp->age, pp->addr.city, pp->addr.street);
return 0;
}
在上述示例代码中,我们定义了一个结构体 Address
,包含了城市和街道两个成员变量。然后我们再定义了一个结构体 People
,包含了姓名、年龄、以及一个地址结构体作为成员变量。通过嵌套结构体的方式,我们可以实现更复杂的数据结构。
同时,我们还定义了一个指向结构体变量的指针 pp
,通过指针访问结构体成员使用的是“->”运算符。
结构体的数组和动态内存分配
和其他自定义数据类型一样,结构体也可以作为数组的元素来使用。同时,我们还可以通过动态内存分配的方式,动态地创建结构体对象。示例代码如下:
// 定义一个包含年、月、日成员的结构体
struct Date {
int year;
int month;
int day;
};
int main() {
struct Date dates[3] = {
{2020, 1, 1},
{2020, 2, 14},
{2021, 5, 1}
};
// 创建指向结构体变量的指针
struct Date *pdate = (struct Date*) malloc(sizeof(struct Date));
// 动态分配内存,初始化结构体变量
pdate->year = 2022;
pdate->month = 1;
pdate->day = 1;
// 使用结构体数组和指针
for (int i = 0; i < 3; i++) {
printf("日期:%d-%d-%d\n", dates[i].year, dates[i].month, dates[i].day);
}
printf("日期:%d-%d-%d\n", pdate->year, pdate->month, pdate->day);
// 释放动态分配的内存
free(pdate);
return 0;
}
在上述示例代码中,我们定义了一个结构体 Date
,包含了年、月、日三个成员变量。然后我们创建了一个结构体数组 dates
,包含了三个日期对象。接着,我们又动态地创建了一个结构体对象 pdate
,并且释放了动态分配的内存。
总结
结构体是C语言中重要的自定义数据类型,可以方便地打包多个数据,形成一个整体。通过嵌套、数组和指针等操作,我们可以更灵活地使用和管理结构体。在实际的编程过程中,掌握好结构体的使用,可以大大提高程序的可读性和可维护性。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言 struct结构体超详细讲解 - Python技术站