语言基础】结构体"/>
【手撕C语言基础】结构体
- (꒪ꇴ꒪ ),hello我是祐言
- 博客主页:C语言基础,Linux基础,软件配置领域博主🌍
- 快上🚘,一起学习!
- 送给读者的一句鸡汤🤔:
- 集中起来的意志可以击穿顽石!
- 作者水平很有限,如果发现错误,可在评论区指正,感谢🙏
当谈到C语言中的数据结构时,结构体(struct)是一个非常重要的概念。结构体允许我们将多个不同类型的数据组合在一起,并且可以自定义的方式进行访问和操作。本文将从结构体定义、结构体赋值、结构体数组和结构体指针四个方面介绍结构体在C语言中的使用方法和技巧。
一、结构体定义
在C语言中,结构体是一种用户自定义的数据类型,可以将多个不同类型的数据组合在一起。结构体的定义通常放在函数外部,以便于全局使用。下面是一个结构体的定义示例:
#include <stdio.h>struct student {char name[20];int age;float score;
};
在上面的示例中,我们定义了一个名为 student
的结构体,它包含了名字(字符串类型)、年龄(整数类型)和分数(浮点数类型)三个成员。
二、结构体赋值
结构体变量可以通过赋值操作来存储数据。可以使用赋值运算符 =
将一个结构体的值赋给另一个结构体变量,也可以逐个成员地对结构体进行赋值。
下面是一个结构体赋值示例:
#include <stdio.h>
#include <string.h>struct student {char name[20];int age;float score;
};int main() {struct student s1;strcpy(s1.name, "Tom");s1.age = 18;s1.score = 90.5;printf("Name: %s\n", s1.name);printf("Age: %d\n", s1.age);printf("Score: %.2f\n", s1.score);return 0;
}
在上面的示例中,我们首先定义了一个名为 s1
的结构体变量,并通过 strcpy
函数给name
成员赋值,然后直接通过赋值语句给 age
和 score
成员赋值。最后,我们使用 printf
函数将结构体成员的值输出到屏幕上。
上述的方法呢是最简单的顺序赋值,当你需要添加一个成员进去时,就会打乱所有顺序,因此我们还需掌握另一种赋值法 指定成员赋值:指定成员赋值是一种在C语言中为结构体成员指定具体数值的方法。通过指定成员赋值,我们可以有选择地对结构体的特定成员进行赋值,而不必按照结构体成员的定义顺序来逐个赋值。
struct 结构体名 变量名 = {成员1数值, 成员2数值, ...};
其中,成员1数值
、成员2数值
等表示要为相应成员赋的具体值。值的顺序必须与结构体定义中成员的顺序一致,或者可以通过成员名进行指定。下面是一个示例:
#include <stdio.h>struct student {char name[20];int age;float score;
};int main() {struct student s = {.name = "Tom", .score = 90.5, .age = 18};printf("Name: %s\n", s.name);printf("Age: %d\n", s.age);printf("Score: %.2f\n", s.score);return 0;
}
在上面的示例中,我们使用了指定成员赋值的方式创建了一个名为 s
的 student
结构体变量。通过在花括号内按成员名 = 数值的形式指定成员的赋值顺序,可以不必按照结构体定义中成员的顺序来赋值。在该示例中,我们先指定了 name
成员的赋值,然后是 score
和 age
。
三、结构体数组
结构体数组是多个结构体的集合,可以按照数组的方式进行访问和操作。下面是一个结构体数组的示例:
#include <stdio.h>struct student {char name[20];int age;float score;
};int main() {struct student s[3] = {{"Tom", 18, 90.5},{"Jerry", 20, 85.0},{"Alice", 19, 95.5}};for (int i = 0; i < 3; i++) {printf("Name: %s\n", s[i].name);printf("Age: %d\n", s[i].age);printf("Score: %.2f\n", s[i].score);printf("\n");}return 0;
}
在上面的示例中,我们定义了一个包含3个元素的结构体数组s
,每个元素都是一个 student
结构体。通过使用花括号“{ }”和逗号 “,”的方式,我们给每个结构体的成员变量赋值。然后,使用 for
循环遍历结构体数组,并将每个结构体的成员输出到屏幕上。
四、结构体指针
结构体指针允许我们通过指针对结构体进行访问和操作,这对于动态分配内存和传递结构体参数非常有用。下面是一个结构体指针的示例:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>struct student {char name[20];int age;float score;
};int main() {struct student *s1 = (struct student *)malloc(sizeof(struct student));strcpy(s1->name, "Tom");s1->age = 18;s1->score = 90.5;printf("Name: %s\n", s1->name);printf("Age: %d\n", s1->age);printf("Score: %.2f\n", s1->score);free(s1);return 0;
}
在上面的示例中,我们首先使用 malloc
函数动态分配了一个结构体大小的内存空间,并将其赋值给s1
指针。然后,通过指针操作符->
来给结构体成员赋值和访问。最后,我们使用 free
函数释放了动态分配的内存空间。
综合例程
下面是一个综合程序的运行结果与代码,里面涉及到上述的所有知识点。
#include <stdio.h>
#include <string.h>
#include <stdlib.h> //一定注意头文件!!!需要的都要加!struct student
{char name[20];short int age;int number;};int main(void)
{int a = 1;struct student zhang ={.name = "ZHANGSAN",.age = 23,.number = 7164101};struct student li ={.name = "LISI",.age = 23,.number = 7164101};printf("a = %d\n", a);printf("%s, %hd, %d\n", zhang.name, zhang.age, zhang.number);printf("%s, %hd, %d\n", li.name, li.age, li.number); printf("-------修改值-------\n");stpcpy(zhang.name,"ZhangSan");zhang.age = 20;zhang.number = 7164111;printf("%s, %hd, %d\n", zhang.name, zhang.age, zhang.number);printf("--------------------\n");struct student su;stpcpy(su.name,"SYJ");su.age = 22;su.number = 7164109;printf("%s, %hd, %d\n", su.name, su.age, su.number);printf("-----结构体数组------\n");struct student c2305[50] = {{.name = "lhx",.age = 22,.number = 100},{.name = "syj",.age = 23,.number = 101}};stpcpy(c2305[2].name,"yqh");c2305[2].age = 23;c2305[2].number = 102;for (int i = 0;i <3;i++){printf("%s, %hd, %d\n", c2305[i].name, c2305[i].age, c2305[i].number);}printf("-----结构体指针------\n");struct student *psu = malloc( sizeof(struct student) );stpcpy(psu->name,"Susu");psu->age = 23;psu->number = 7164119;printf("%s, %hd, %d\n", psu->name, psu->age, psu->number);}
希望本篇博客对您理解和应用结构体有所帮助。如果您对其他C语言相关的内容感兴趣,欢迎继续阅读我的其他博客~
📢写在最后
- 今天的分享就到这啦~
- 觉得博主写的还不错的烦劳
一键三连喔
~ - 🎉感谢关注🎉
更多推荐
【手撕C语言基础】结构体
发布评论