从零开始一起学C语言(六)---结构体

本文详细介绍了C语言中结构体和共用体的定义、初始化、元素访问及大小计算。通过实例讲解了结构体的三种定义方式、初始化方法、元素访问途径以及结构体和共用体的内存分配原则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一、结构体的引入

二、结构体的定义以及初始化

1、结构体的定义

2、结构体变量的初始化。

三、结构体内元素的访问

1、用结构体变量名

2、用结构体指针

四、结构体类型的大小

五、共用体

1、共用体的定义

2、共用体常用举例

六、公用体的大小

七、枚举


一、结构体的引入

现实生活中有很多变量需要描述,例如一个人的信息

姓名:char name[20];

性别:char sex;

年龄:int age;

当需要描述很多人的信息的时候,就显得非常麻烦。这样c语言就引入了结构体的概念。

       结构体是不同数据类型变量的集合。

二、结构体的定义以及初始化

1、结构体的定义

三种方法:

1)

struct tag

{

       char name[20];

       char sex;

       int age;

};  //定义结构体类型

struct tag people; //定义结构体变量

先定义结构体类型,再用类型定义变量。最常用的方法。

2)

struct tag

{

       char name[20];

       char sex;

       int age;

}people;

struct tag people2;

//定义类型的同时定义一个变量,还可以用来定义其他变量。

3)

struct

{

       char name[20];

       char sex;

       int age;

}people;

这种方法只能在定义类型的时候定义变量。

2、结构体变量的初始化。

用大括号,给对应的元素赋值。

struct tag

{

       char name[20];

       char sex;

       int age;

}people = {“zhangsan”,’b’,20};

struct tag people2 = {“lisi”,’b’,22};

三、结构体内元素的访问

1、用结构体变量名

结构体变量名.元素

2、用结构体指针

指针变量名->元素

两种方法访问到的结果是一样的。

#include <stdio.h>

struct tag

{

         char name[20];

         char sex;

         int age;

}people = {"zhangsan",'b',20};

struct tag people2 = {"lisi",'b',22};



int main()

{

         struct tag *p;

         struct tag student[3]= {{"老大",'b',30},{"老二",'b',25},{"老三",'g',18}};

         int i;

         p = &people2;

         printf("姓名:%-10s性别:%-5c年龄:%-5d\n",people.name,people.sex,people.age);

         printf("姓名:%-10s性别:%-5c年龄:%-5d\n",p->name,p->sex,p->age);

         for(i=0;i<3;i++)

                   printf("姓名:%-10s性别:%-5c年龄:%-5d\n",student[i].name,student[i].sex,student[i].age);

         return 0;

}

四、结构体类型的大小

1、每次开辟内存的大小都为最大的数据类型大小。

2、从上往下存储。

struct tag

{

       char a;//1

       int b; //2

       char str[5];//3

};

拥有1、2时大小为 8

拥有 2、3时大小为 12

拥有1 、2 、3时大小为 16

五、共用体

1、共用体的定义

可以理解为一种特殊的结构体,里面同样可以存储不同的数据类型,但是不同的数据类型占用同一内存空间。

常用的定义格式:

union 共用体名

{

       类型1 变量名1;

       类型2 变量名2;

       ………

       类型n 变量名n;

};

union 共用体名 共用体变量名;

2、共用体常用举例

把一个整形数据拆分为4个字符型数据。

#include <stdio.h>

union tag

{

         int a;

         char str[4];

};





int main()

{

         union tag share;

         int i;

         share.a = 0x12345678;

         for(i =0;i<4;i++)

                   printf("%x\n",share.str[i]);

         return 0;

}

六、公用体的大小

1、大小为最大数据类型的整数倍。

2、能存储最大的变量。

七、枚举

把变量可能出现的值一一列举出来,相当于一个常量的集合。

格式:

enum 枚举名{枚举常量1,枚举常量2……..枚举常量n};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值