上一篇: C语言之内存管理(十七)(转世灵童现世)
逐梦编程,让中华屹立世界之巅。
简单的事情重复做,重复的事情用心做,用心的事情坚持做;
文章目录
- 前言
- 一、什么是结构体?
- 二、结构体的定义及初始化
- 三、结构体数组
- 四、结构体嵌套
- 五、结构体赋值
- 六、结构体数组作为函数的形参
- 总结
- 新壁纸
前言
C语言一共有三大复合数据类型,分别为结构体、共用体、枚举类型;
其中结构体与枚举类型可谓是在程序中铺天盖地的存在,所以尤其重要,需要重点学习,共用体的作用相对少一些;
一、什么是结构体?
答案:将多个相同或不同类型的数据存在在一块连续的内存空间中;
特点:结构体中的成员空间是独立的,没有空间,只有大小;
二、结构体的定义及初始化
//模板形式
struct 结构体名称{
结构体里面包含的变量或者数组;
};
代码如下(示例):
/*-----------------------------------【程序说明】----------------------------
* 项目命题: C语言入门篇
* 代码所属: 瑶池酒剑仙(枫之剑客)
* 作者: 阿甘
* 开发时间: 2021/12/13
* IDE 版 本: Visual Studio 2015
* 项目版本: 1.0.0.1
*---------------------------------------------------------------------------*/
//原文链接:https://blog.csdn.net/gzplyx?type=blog
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
//定义六部曲
//1、定义一个结构体数据类型;
//2、stu是这个结构的名字;
//3、整个结构体的类型是struct stu
//4、结构体类型struct stu{}中是结构体的成员,共有3个成员,每个成员的类型可以是任意的类型;
//5、定义时,{}后面记得加分号;
//6、不可以给结构体成员赋值;
struct stu
{
int id ;
int age;
char name[128];
} a;//定义类型时,同时也定义了结构体变量struct stu a;
struct stu c;
int main()
{
//struct stu d = { .age=20 };//给部分成员初始化,其他成员内容为0
struct stu d;
//如何给结构体成员赋值(如何操作结构体成员)
//第一种:
//如果通过结构体变量操作结构体成员,使用点域.操作
/*d.id = 2;
d.age = 20;
strcpy(d.name , "world");
printf("%d %d %s\n",d.id,d.age,d.name);*/
//第二种:
//如果通过结构体的地址操作结构体成员,使用->
(&d)->id = 3;
(&d)->age = 20;
strcpy((&d)->name, "world");
printf("%d %d %s\n", (&d)->id,(&d)->age,(&d)->name);
system("pause");
return 0;
}
三、结构体数组
本质上就是一个数组,数组的每一个元素都是结构体;
代码如下(示例):
/*-----------------------------------【程序说明】----------------------------
* 项目命题: C语言入门篇
* 代码所属: 瑶池酒剑仙(枫之剑客)
* 作者: 阿甘
* 开发时间: 2021/12/13
* IDE 版 本: Visual Studio 2015
* 项目版本: 1.0.0.1
*---------------------------------------------------------------------------*/
//原文链接:https://blog.csdn.net/gzplyx?type=blog
int main()
{
//定义一个结构体数组,结构体数组有5个元素,每个元素是struct stu 类型
struct stu num[5] = { {1,20,"lucy"},{2,21,"bob"},{3,22,"peter"},
{4,25,"maker"},{5,26,"ubunqu"} };
for(int i=0;i<sizeof(num)/sizeof(num[0]);i++)
{
printf("%d %d %s\n",num[i].id,num[i].age,num[i].name);
}
system("pause");
return 0;
}
四、结构体嵌套
代码如下(示例):
/*-----------------------------------【程序说明】----------------------------
* 项目命题: C语言入门篇
* 代码所属: 瑶池酒剑仙(枫之剑客)
* 作者: 阿甘
* 开发时间: 2021/12/13
* IDE 版 本: Visual Studio 2015
* 项目版本: 1.0.0.1
*---------------------------------------------------------------------------*/
//原文链接:https://blog.csdn.net/gzplyx?type=blog
struct stu
{
int id ;
int age;
char name[128];
} ;
struct heima_stu
{
struct stu s;
char subject[128];
};
int main()
{
struct heima_stu heima;
heima.s.id = 1;
heima.s.age = 22;
strcpy(heima.s.name,"ubunqu");
strcpy(heima.subject,"c++");
printf("%d %d %s %s\n",heima.s.id,heima.s.age,heima.s.name,heima.subject);
system("pause");
return 0;
}
五、结构体赋值
代码如下(示例):
/*-----------------------------------【程序说明】----------------------------
* 项目命题: C语言入门篇
* 代码所属: 瑶池酒剑仙(枫之剑客)
* 作者: 阿甘
* 开发时间: 2021/12/13
* IDE 版 本: Visual Studio 2015
* 项目版本: 1.0.0.1
*---------------------------------------------------------------------------*/
//原文链接:https://blog.csdn.net/gzplyx?type=blog
int main()
{
struct stu a = {1,34,"bob"};
struct stu b;
//1 memcpy
//memcpy_str( &b,&a);
//2
//b.id = a.id;
//b.age = a.age;
b.name = a.name;//err
//strcpy(b.name,a.name);
//3
b = a;//ok 相同类型的变量是可以相互赋值
printf("%d %d %s\n",b.id,b.age,b.name);
system("pause");
return 0;
}
六、结构体数组作为函数的形参
代码如下(示例):
/*-----------------------------------【程序说明】----------------------------
* 项目命题: C语言入门篇
* 代码所属: 瑶池酒剑仙(枫之剑客)
* 作者: 阿甘
* 开发时间: 2021/12/13
* IDE 版 本: Visual Studio 2015
* 项目版本: 1.0.0.1
*---------------------------------------------------------------------------*/
//原文链接:https://blog.csdn.net/gzplyx?type=blog
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct c13
{
int id;
char name[128];
};
//void set_num(struct c13 num[5] )
void set_num(struct c13 *p,int n )
{
for (int i = 0; i < n; i++)
{
//(*(p + i)).id = i + 10;
p[i].id = i + 10;
//(p + i)->id = i + 10;
char buf[128] = "";
sprintf(buf,"%d%d%d",i,i,i);
strcpy(p[i].name,buf);
}
}
int main()
{
struct c13 num[5];
memset(num,0,sizeof(num));
set_num(num,sizeof(num)/sizeof(num[0]));// num = &num[0]
for (int i = 0; i < sizeof(num) / sizeof(num[0]); i++)
{
printf("%d %s\n",num[i].id,num[i].name);
}
system("pause");
return 0;
}
总结
以上就是今天要讲的内容,本文重点带大家认识结构体的基本情况,以及重要的结构体数组及其应用,在实际应用中,C语言结构体数组常被用来表示一个拥有相同数据结构的群体,例如一个公司的员工、一个医院的医生等;文末了,喜欢的小伙伴帮忙点个赞、收藏、关注一波,谢谢!