【手撕C语言基础】结构体

编程入门 行业动态 更新时间:2024-10-11 11:13:41

【手撕C<a href=https://www.elefans.com/category/jswz/34/1770116.html style=语言基础】结构体"/>

【手撕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语言基础】结构体

本文发布于:2024-02-06 15:46:18,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1750082.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:语言   结构   基础

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!