结构体

目录

1. 结构体

1.1 结构体概述

1.2 结构体嵌套

1.3 结构体数组

1.4 访问成员变量

1.5 指向结构体的指针  

1.6 结构体空间计算

2. 共用体、枚举

2.1 共用体

2.2 枚举


1. 结构体

1.1 结构体概述

        结构体是一种构造数据类型,使用关键字“struct”来表示。是指一系列相同数据类型或者不同数据类型的数据构成的集合。结构体中的成员变量跟数组中的元素一样,在存储空间中都是连续存储的。

     格式:

                struct 类型名   

                {

                成员(成员变量)1;     

                成员(成员变量)2;  

                成员(成员变量)3;  

                        …                

                成员(成员变量)n; 

                }; 

              注:结构体声明语句最后必须加";"号

                     结构体声明时成员变量不能赋值

//先声明结构体类型,再定义结构体变量
struct  std 
{
    char name[20]; 
    int id;        
    float score;    
}; 
struct std  std1;  
struct std  a;
//在声明结构体类型的同时,定义结构体变量
struct  std 
{
    char name[20]; 
    int id;        
    float score;    
}std1,a;   // std1、a 即为定义的结构体变量

1.2 结构体嵌套

      结构体嵌套就是一个结构体类型内嵌套另一个结构体类型

#include <stdio.h>
struct  std 
{
	char name[20]; 
	int id;        
	float score;    
}; 
struct  sss
{
	int a; 
	int id;        
	struct std c;    
};
int main()
{
	struct sss as={3,45,{"sdsd",43,52.1}}; //定义结构体变量
}

1.3 结构体数组

        结构体数组本质上是数组,数组中的元素类型是结构体类型,

        格式:结构体关键字 结构体类型名 数组名[数组长度]

#include <stdio.h>

struct std  
{
	char name[20]; 
	int id;        
	float score;    
}; 

int main()
{
	struct std buff[3]={{"zhangsan",1,68.2},{"lisi",2,96},{"wanger",3,86}};
	printf("%s\n",buff[0].name);
	printf("%d\n",buff[1].id);
	printf("%.2f\n",buff[2].score);
}

1.4 访问成员变量

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

typedef struct   
{
	char name[20]; 
	int id;        
	float score;    
}std; 
struct  sss
{
	int a; 
	int id;        
	std c;    
};
int main()
{
	struct sss as={3,45,{"sdsd",43,52.1}}; 
	printf("%d\n",as.a);
	printf("%d\n",as.id);
	printf("%s\n",as.c.name);
	printf("%.2f\n",as.c.score); 
}

1.5 指向结构体的指针  

#include <stdio.h>

typedef struct   
{
	char name[20]; 
	int id;        
	float score;    
}std; 

int main()
{
	std buff[3]={{"zhangsan",1,68.2},{"lisi",2,96},{"wanger",3,86}};
	std as={"lisi",45,52.1}; 
	std *p=NULL;
	p=&as;
	//指针访问成员变量
	printf("%d\n",p->id);
	p->id = 5;
	printf("%d\n",p->id);
	p=buff;
	printf("%s %s %s\n",(*p).name,(*(p+1)).name,(p+2)->name);
}

1.6 结构体空间计算

        (1)对齐原则---内存按结构体成员的先后顺序排列,当排到该成员时,其前面已开辟的空间          字节数必须是该成员类型所占字节数的整数倍,如果不够则补齐,依次向后类推。  

        (2)整体空间是占用空间最大的成员类型所占字节数的整数倍。

2. 共用体、枚举

2.1 共用体

        共用体是一种特殊的结构体,共用体的成员变量共用一个存储空间,当成员变量赋值时会把  前一次的赋值覆盖掉,空间大小是最大成员变量的整数倍。关键字“union”

#include <stdio.h>

union std
{
	int a;        
	char b;       
	double c;     
	char buff[10]; 
};

2.2 枚举

        枚举类型是一组整型变量,关键字“enum”

        格式:enum 枚举类型名{枚举变量1,枚举变量2……枚举变量n}

#include <stdio.h>

enum number{a,one,two,there,fore,five};//第一个变量代表0,往后依次+1 

int main()
{
	int a;
	printf("%d\n",one);
	printf("%d\n",two);
	printf("请输入数字1-5\n");
	scanf("%d",&a);
	switch(a)
	{
		case one: printf("one\n");break;
		case two: printf("two\n");break;
		case there: printf("there\n");break;
		case fore: printf("fore\n");break;
		case five: printf("five\n");break;
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值