C语言之结构体、结构体数组

目录

前言

一、结构体的声明与定义

1、结构体的声明

2、结构体的定义

(1)先声明结构体类型,再定义该类型的变量

(2) 声明类型的同时定义变量

(3)不指定类型名而直接定义结构体类型变量

 (4)使用结构体作为成员

二、结构体变量的初始化与引用

三、结构体数组

1、结构体数组的定义与初始化

2、结构体数组的应用举例


前言

在我们日常生活中有很多东西都不能简单的用一个整型或者一个字符串来表示,比如学生的学号、姓名、年龄等基本信息,再比如一本书有书名、作者、出版社等属性,描述这些复杂的东西,我们可以用结构体来解决。结构体就是可以将多种数据类型组合起来的结构。

一、结构体的声明与定义

1、结构体的声明

结构体可以在函数内声明也可以在函数外声明,在函数内部声明只能在该函数内使用,所以我们通常在函数外声明,这样就可以被多个函数使用。

声明结构体类型的形式如下:

struct 结构体名称{
    成员1的类型 成员1的名称;
    成员2的类型 成员2的名称;
    ......
    成员n的类型 成员n的名称;
};

注意:花括号后面的分号不能少

 例如,学生的姓名、性别、年龄如下:

struct student{
    char name[10];
    char sex[5];
    int age;
}; //声明结构体类型struct student

2、结构体的定义

(1)先声明结构体类型,再定义该类型的变量

这种方式是声明类型和定义变量分离,在声明类型后可以随时定义变量,比较灵活。

struct time{ //先声明结构体类型struct time
    int hour;
    int minute;
    int second;
};

struct time today;//再定义结构体变量today

(2) 声明类型的同时定义变量

struct student{
    char name[10];
    int age;
    int grade;
}Tom,Amy; //定义了两个结构体变量Tom,Amy

(3)不指定类型名而直接定义结构体类型变量

指定了一个无名的结构体类型,它没有名字,不能再以此结构体类型去定义其他变量,这种方式用的不多。

struct {  //没有结构体的名称
    char name[10];
    int age;
    int grade;
}Tom,Amy;

 (4)使用结构体作为成员

struct date{
    int year;
    int month;
    int day;
};

struct person{
    char name[10];
    struct date brithday;//将出生日期这个结构体作为person的成员
};

二、结构体变量的初始化与引用

在定义结构体变量时,可以对它初始化,即赋初值,然后就可以引用这个变量。

引用结构体变量中成员的值,引用方式为:结构体变量名. 成员名。其中“.”是成员运算符,它在所有的运算符中优先级最高。

#include<stdio.h>

struct student{
    int number;
    char name[10];
    int age;
};

int main()
{
    struct student a={01,"Amy",18}; //在变量a定义的同时对它初始化

    printf("number:%d,name:%s,age:%d",a.number,a.name,a.age);
    
    return 0;
}

三、结构体数组

结构体数组每个数组元素都是一个结构体类型,他们都分别包括各个成员项。

1、结构体数组的定义与初始化

定义结构体数组的一般形式有两种,如下:

1、声明结构体类型的同时定义结构体数组

struct 结构体名称{

        成员表列

}数组名[数组长度];

2、先声明结构体类型,然后定义结构体数组

struct 结构体名称{

        成员表列

};

struct 结构体名称 数组名[数组长度];

 例如:

struct student{
	char name[20];
	int age;
}; //声明一个结构体类型struct student
 
struct students stu[3]={"Allen",18,"Smith",19,"Grace",18};
//定义一个结构体数组stu[3],并初始化

2、结构体数组的应用举例

 例如,有五个学生,创建一个结构体包括学号、姓名、性别、年龄,打印年龄大于18的学生信息,如下:

#include<stdio.h>

struct student{
	int number;
	char name[10];
	char sex[5];
	int age;
};

int main()
{
	struct student stu[5]={
	    {01,"Tom","boy",17},
        {02,"Jack","boy",19},
        {03,"Amy","girl",16},
        {04,"Marry","girl",20},
        {05,"Lose","girl",19}
	};
	
	int i;
	
	printf("年龄大于18的学生信息如下:\n");
	for(i=0;i<5;i++)
	{
		if(stu[i].age>18)
		printf("number:%d\n name:%s\n sex:%s\n age:%d\n",
            stu[i].number,stu[i].name,stu[i].sex,stu[i].age);
	}
	
	return 0;
}

说到这里,结构体就基本差不多了,还有一个结构体指针下次再讲。

  • 13
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

朝 颜

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

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

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

打赏作者

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

抵扣说明:

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

余额充值