C语言之结构体

结构体定义

由若干不同数据类型组成的新的复合数据类型.(自定义类型).封装.
格式: struct 结构体名{结构体成员部分};
定义结构体变量:
struct 结构体名 变量名;
struct 结构体名{结构体区域}变量名;
初始化方式
第一种:struct Man danny = {666,1};
第二种:struct Man{
int id;
int sex;
}xiaqi = {999,0};
第三种: 赋值方式 直接通过点去访问结构体中的成员变量.
xiaqi.id = 999;
xiaqi.sex = 1;
结构体重命名:
typedef struct woman{
char name;
int id;
}xxx;

结构体指针

一个指针指向于结构体,定义如下
struct woman* pXiaqi = (struct woman*)malloc(sizeof(Wm));
使用: 用指针通过->的方式访问成员变量,例如:
pXiaqi->id = 123;
结构体嵌套:

  1. 在结构体中定义结构体例如;
     struct wo{
    	            int id;
    	            char name;
    	            int sex;
    	            struct baby	
    	            	{
    		                int id;
    		              	char name;
    	            	 }zichen;
    	             }
  1. 在结构体中使用结构体变量
struct WM
{
	int id;
	char name;
}TF_wm;
struct wo
{
	int x;
	TF_wm guangguang;  //TF_wm就是结构体WM的别名,guangguang是名字
};

代码示例

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

typedef struct woman                   //结构体woman,前面加一个typedef 就是要去别名。后面的Wm就是别名
	char name[20];
	int id;
}Wm,*Pwm;                               //结构体woman的别名

typedef struct wo
{
	int id;
	char name;
	int sex;
	struct baby
	{
		int id;
		char name;
	}zichen;
	Wm guanguang;
}wo;

//typedef struct woman*         Pwm;

int main()
{
	
	//动态分配一个结构体内存空间大小 pxiaqi指向这块内存.
	struct woman* pXiaqi = (struct woman*)malloc(sizeof(Wm));
	printf("pxiaqi = %d\n", sizeof(pXiaqi));
	pXiaqi->id = 123;
	strcpy(pXiaqi->name ,"xiaqi");
	printf("名字%s,id = %d\n", pXiaqi->name, pXiaqi->id);
	Pwm pxq;

	wo tutu;
	tutu.id = 233;                                             //结构体的元素赋值
	tutu.zichen.id = 333;
	tutu.sex = 1;
	tutu.zichen.name = 'z';

	tutu.guanguang.id = 123;                       //结构体的元素赋值
	strcpy(tutu.guanguang.name , "gg");


	return 0;
}

结构体数组

数组中元素时结构体.每个元素都是结构体组成.
访问结构体: 每个元素都是结构体,把每个元素当做结构体变量使用
arr[0].id = 123;
位段:按照位的方式存储结构体中某一个成员变量的某几位
格式: struct 结构体名{类型 变量名:长度};
案例:

typedef struct person
{
	unsigned char sex:1;  // sex = 3;   位段
	char name;
	int id;	
}per,*Pper;

对齐和补齐:
1. 小的数据类型放最前面,按照从小到大定义变量
2. 相同数据类型放一起.
大端和小端:
小端:数值的高位字节放在内存的高地址上

代码示例

#include <stdio.h>

//位段
typedef struct person
{
	unsigned char sex:1;  // sex = 3; 
	char name;
	int id;
}per,*Pper;

struct test
{
	char x;
	int  y;
	char z; 
};

int main()
{
	per danny;
	per arr[10] = { { 1, '1', 1 }, { 0, 'a', 2 }, {0,'v',3} };
	arr[0].id = 123;
	arr[0].name = '1';
	arr[0].sex = 1;
	printf("arr[0].id = %d ,arrr[0].name = %c\n", arr[0].id, arr[0].name);
	printf("sizeof(arr) = %d\n", sizeof(arr));
	
	//第二个知识点
	per xq;                     //由于结构体per 中  sex使用了位段的形式unsigned char sex:1;,所以sex的值只能为0或者1
	xq.sex = 1;
	printf("xq.sex = %d\n", xq.sex);//sex的值为1的时候++,结果又会变成0
	xq.sex++;
	printf("xq.sex = %d\n", xq.sex);
	xq.sex++;
	printf("xq.sex = %d\n", xq.sex);

	struct test t;
	printf("sizeof(t) = %d", sizeof(t));

	int x = 0x12345678;
	
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值