C语言之结构体

124 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 7 天,点击查看活动详情

一、概述

  • 数组:描述一组具有相同类型数据的有序集合,用于处理大量相同类型的数据运算。 有时候我们需要将不同类型的数据组合成一个有机的整体,比如:一个学生有学号、姓名、性别、年龄、分数、地址等属性,显然单独定义以上变量比较繁琐,数据不便于管理。恰好,C语言中给出了另一种构造数据类型——结构体;在其他一些高级语言中称其为“记录”。

二、结构体变量的定义与初始化

1、定义结构体变量方式:

  • 先声明结构体类型再定义变量名;

  • 在声明类型的同时定义变量;

  • 直接定义结构体类型变量(无类型名)

2、结构体类型和结构体变量关系

  • 结构体类型:指定了一个结构体类型,它相当于一个模型,但其中并无具体数据。系统对之也不分配实际内存单元。

  • 结构体变量:系统根据结构体类型(内部成员状况)为之分配空间。

示例代码如下

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>

//struct 结构体名
//{
// 结构体成员列表
//	姓名
//	年龄
//  成绩
//}

struct student
{
	char name[21];
	int age;
	int score;
	char addr[51];
};//stu = { "张三",18,100,"北京市昌平区北清路22号" };
int main0201()
{
	//创建结构体变量
	//结构体类型 结构体变量
	//struct student stu;
	////stu.name = "张三";
	//strcpy(stu.name, "张三");
	//stu.age = 18;
	//stu.score = 100;
	//strcpy(stu.addr, "北京市昌平区北清路22号");


	struct student stu = { "张三",18,100,"北京市昌平区北清路22号" };
	printf("姓名:%s\n", stu.name);
	printf("年龄:%d\n", stu.age);
	printf("成绩:%d\n", stu.score);
	printf("地址:%s\n", stu.addr);

	return EXIT_SUCCESS;
}

int main0203(void)
{
	struct student stu;
	scanf("%s%d%d%s", stu.name, &stu.age, &stu.score, stu.addr);
	printf("姓名:%s\n", stu.name);
	printf("年龄:%d\n", stu.age);
	printf("成绩:%d\n", stu.score);
	printf("地址:%s\n", stu.addr);
	return 0;
}

三、结构体数组

1、定义结构体数组的一般形式

(1)struct结构名

{成员表列} 数组名[数组长度];

(2)先声明一个结构体类型,然后再用此类型定义结构体数组

结构体类型 数组名[数组长度];

2、对结构体数组初始化的形式是在定义数组的后面加上

={初值表列};

示例程序

struct Student Person[2] = {"si",0,"sun",0};