C语言 struct结构体

本文详细介绍了C语言中的struct结构体,包括结构体的声明、定义、初始化和引用,以及结构体数组和结构体指针的使用。通过实例展示了如何通过结构体存储和操作相关联的数据,如学生信息。
摘要由CSDN通过智能技术生成

struct 结构体

一、初识struct

什么是结构体类型?结构体类型是怎么样的?在许多程序中,所用的变量大多数是互相独立、无内在联系的。比如定义了整型变量x,y,z,它们都是单独存在的变量,在内存中的地址也是互不相干的,但在实际生活和工作中,有些数据是有内在联系的,成组出现的。比如,一个学生的学号、姓名、性别、年龄、成绩、家庭地址等项,是属于同一个学生的,可以看到性别(sex)、年龄(age)、成绩( score)、地址(addr)是属于学号为20202021和名为“ 小美”的学生的。如果将num、name、sex、age、 score、addr分别定义为互相独立的简单变量,难以反映它们之间的内在联系。


  人们希望把这些数据组成一个组合数据,例如定义一个名为 student1的变量,在这个变量中包括学生1的学号、姓名、性别、年龄、成绩、家庭地址等项。这样,使用起来就方便多了。

num name sex age score addr
20202021 小美 20 98 深圳
针对这一问题,我们可以用一个叫做  “结构体” 的东西;
(定义)它允许建立由不同类型的数据组成的组合型的数据结构。

二、建立结构体类型:

struct student
	{
   
		int  num;          
		char name[10];
		char sex;
		int  age;
		float score;
		char addr[50];			
	};                 //注意:后面一定要有分号 


  上面我们指定了一个结构体类型 struct student( struct是声明结构体类型时 所必须使用的关键字),它向编译系统说 : “ 我是一个“结构体类型” ,我包含num,name ,sex,age, score,adder 不同数据类型的成员。” 通过比较,这个方法和系统提供的标准类型(如int,char, float,double等)具有相似的作用,都可以用来定义变量,只不过int等类型是系统已声明的,而结构体类型是由自己根据需要在程序中指定的。


2.1 声明一个结构体类型的一般形式为:


struct + 结构体名

{成员列表};


   上述的代码中,struct是结构体的关键字,student是自己起的结构体名,声明student就是结构体名。
   {成员列表} 是该student结构体中所包含的“结构体成员” ,如num,name ,sex,age, score,adder ,对每个“成员”都进行了数据类型声明(int,char,float等)。



说明:结构体成员中可以包含结构体:

#include<stdio.h>

void main()
{
   
	struct date      // 声明一个结构体类型 struct Date
	{
   
		int month;
		int day;
		int year; 
	};
	struct student 
	{
   
		int  num;          
		char name[10];
		char sex;
		int  age;
		struct date birthday;	     //成员 birthday属于 struct Date类型
		char addr[50];	
		
			
	};        //注意:一定要有分号 
	
 }
 

意思表示这样:
在这里插入图片描述



三、定义结构体类型变量

  前面只是建立了一个结构体类型,它相当于一个模型,并没有定义变量,里面并无具体数据,系统对之也不分配存储单元。相当于设计好了图纸,但并未建成具体的房屋。为了能在程序中使用结构体类型的数据,应当定义结构体类型的变量,并在其中存放具体的数据,可以采取以下3种方法定义结构体类型变量:

方法一:先声明结构体类型,再定义该类型的变量

struct student   student1,student2;

结构体类型名          结构体变量名     

student1:

202022 小明 20 97 广州

student2:

202023 小白 20 96 珠海


方法二:在声明类型的同时定义变量

struct student
	{
   
		int  num;          
		char name[
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

琅中之嶹

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值