栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言—结构体

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言—结构体

文章目录
    • 一、结构体的概念
    • 二、 结构体类型定义
      • 2.1 结构体类型的定义
    • 三、结构体变量的定义初始化
      • 3.1结构体变量的初始化
      • 3.2 结构体变量的使用
    • 四、结构体数组
    • 五、结构体指针
    • 六、结构体内存分配
    • 七、共用体
    • 八、枚举

一、结构体的概念

将不同类型的数据组合成一个有机的整体,以便于引用。
结构体是一种构造数据类型(由一种或多种基本类型或构造类型的数据的集合)

二、 结构体类型定义 2.1 结构体类型的定义

(1)struct 结构体类型名{
成员列表
};
例

struct stu{
int num;
char name[20];
char sex;
};

//有了结构体类型以后,就可以用类型定义变量
struct lucy,bob,helen; //定义了三个struct stu类型的变量
每个变量里都有三个成员,分别是num,name,sex
暂时可以认为结构体变量的大小是它所有成员的和
(2)struct 结构体类型名{
成员列表
}结构体变量1,变量2;

struct stu{
int num;
char name[20];
char sex;
}lucy,bob,helen;

(3)在定义结构体类型的时候,没有结构体类型名,顺便定义结构体变量,因为没有类型名,所以以后不能再定义相关类型的数据了
struct {
成员列表
}结构体变量1,变量2;

struct{
int num;
char name[20];
char sex;
}lucy,bob,helen;

(4)typedef

typedef struct stu{ 
int num;
char name[20];
char sex;
}STU;

STU就相当于struct stu
STU lucy就等价于struct stu lucy

三、结构体变量的定义初始化 3.1结构体变量的初始化
#include 
struct stu{
	int num;
	char name[20];
	char sex;
};
int main(){
	struct stu Lucy={101,"lucy",'f'};
	return 0;
}
3.2 结构体变量的使用

(1)赋初值

#include 
#include 
struct stu{
	int num;
	char name[20];
	char sex;
	char *addr;
};
int main(){
	struct stu Lucy;
	Lucy.num=100; 
	//Lucy.name="lucy";  // 错误,name是数组名即数组的首地址,不能用等号给常量赋值
	strcpy(Lucy.name,"lucy");
	printf("%d %sn",Lucy.num,Lucy.name);
	//strcpy(Lucy.addr,"beijing"); //错误,bob.addr是个野指针
	bob.addr="beijing";
	return 0;
}

(2)结构体成员的多级引用

#include 
#include 
struct date{
	int year;
	int month;
	int day;
};
struct stu{
	int num;
	char name[20];
	char sex;
	struct date birth;
};
int main(){
	struct stu boy={01,"bob",'m'};
	boy.birth.year=2001;
	boy.birth.month=1;
	boy.birth.day=12;
	return 0;
}

(3)相同类型的结构体可以相互赋值

#include 
struct stu{
	int num;
	char name[20];
	char sex;
};
int main(){
	struct stu Lucy={101,"lucy",'f'};
	struct stu bob;
	bob=Lucy;
	return 0;
}
四、结构体数组

结构体数组就是个数组,由若干个相同类型的结构体变量构成的集合

 #include 
#include 
struct stu{
	int num;
	char name[20];
	char sex;
}edu[3];//定义了一个struct stu类型的结构体数组
int main(){
	edu[0].num=100;
	strcpy(edu[0].name,"carrie");
	printf("%d %sn",edu[0].num,edu[0].name);
	return 0;
}
五、结构体指针

结构体指针即结构体的地址,结构体变量存放在内存中,也有起始地址
我们定义一个变量来存放这个地址,那么这个变量就是结构体指针变量
结构体指针变量也是个指针,在32位环境下,指针变量也占4个字节,存放一个地址编号
1、结构体指针变量的定义方法:
struct 结构体类型名 *结构体指针变量名
struct stu * p; //定义了一个struct stu *类型的指针变量
p是变量名,占了四个字节
例: struct stu boy;
p=&boy;
访问结构体变量的成员的方法:

boy.num=101 
(*p).num=101 /

enum week{
	mon,tue,wed,thu,fri,sat,sun //枚举元素默认都是常量
};
int main(){
	enum week workday;
	workday=mon;
	printf("workday=%dn",workday);
	//tue=8; //这是错误的,tue是常量,不能在程序中用赋值语句再对它赋值
	//workday=abc; //枚举元素中没有abc
	//workday=100; //虽然可以,但是不要这么操作,一般都用枚举元素给枚举变量赋值
	return 0;
}

例:枚举类型的应用

题目:口袋中有红黄蓝白黑五种颜色的球若干个。每次从口袋中先后取出三个球,问得到三种不同颜色的球的可能取法,输出每种排列的情况。
#include 
enum color{red,yellow,bule,white,black};
int main(){
	enum color i,j,k,pri;
	int count=0,loop;
	for(i=red;i<=black;i++){
		for(j=red;j<=black;j++){
			if(i!=j){
				for(k=red;k<=black;k++){
					if((i!=k)&&(j!=k)){
						count++;
						printf("%-4d",count);
						for(loop=1;loop<=3;loop++){
							switch(loop)
							{
							case 1:pri=i;break;
							case 2:pri=j;break;
							case 3:pri=k;break;
							default:break;
							}
							switch(pri)
							{
							case red : printf("%-10s","red");break;
							case yellow:printf("%-10s","yellow");break;
							case bule:printf("%-10s","blue");break;
							case white:printf("%-10s","white");break;
							case black:printf("%-10s","black");break;
							default:break;
							}
						}
						printf("n");
					}
				}
			}
		}
	}
	printf("一共有%d种可能",count);
	return 0;
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1018612.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号