自定义数据类型的学习

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<assert.h>
//void* my_memcpy(void* dest, const void* src, int num)
//{
//	void* ret = dest;
//	assert(dest != NULL);
//	assert(dest != NULL);
//	while (num--)
//	{
//		*(char*)dest = *(char*)src;
//		(char*)dest+1;//??
//		(char*)src+1;//??
//	}
//	return ret;
//}
//memcpy 只要处理不重叠的内存拷贝就可以
//memmove 处理内存重叠的情况
//memcmp  内存比较;
//memset  内存设置;
//int main()
//{
//	int arr1[] = { 1,2,3,4,5 };
//	int arr2[5] = { 0 };
//	my_memcpy(arr2, arr1, sizeof(arr1));//结果不对
//	return 0;
//}

//设计结构体时应尽量让占用空间小的成员集中在一起。
//struct S1
//{
//	char a;
//	int b;
//	char c;
//};
//struct S2
//{
//	char a;
//    char b;
//	int c;
//};
//int main()
//{
//	printf("%d\n", sizeof(S1));//12
//	printf("%d\n", sizeof(S2));//8
//}

//设置默认对齐数4
//#pragma pack(4)
//struct S
//{
//	char a;
//	double b;
//};
//#pragma pack()
//取消默认对齐数的设置;

//位段
//成员是整形,成员名后面有一个冒号和数字,数字代表的是比特位;
//开辟的空间是成员类型的整数倍;
//为了节省空间。
//struct A
//{
//	int a : 2;
//	int b : 5;
//	int c : 10;
//	int d : 30; 
//};
//int main()
//{
//	struct A a;
//	printf("%d\n", sizeof(a));//8
//	return 0;
//}
//offsetof(宏 ) 求的是偏差值
#include<stddef.h>
//struct S
//{
//	char a;
//	int b;
//	double c;
//};
//int main()
//{
//	printf("%d\n", offsetof(struct S, a));//0
//	printf("%d\n", offsetof(struct S, b));//4
//	printf("%d\n", offsetof(struct S, c));//8
//	return 0;
//}

//枚举
// 枚举的优点
// 1:增加了代码的可读性和可维护性
// 2:和#define定义的标识符比较有类型检查,更加严谨。
// 3:防止了命名重复(封装)
// 4:便于调试
// 5:使用方便,可以一次定义多个变量;
//enum sex//枚举类型
//{
//	//枚举的可能取值--枚举常量.默认从0开始。也可以在枚举中赋初始值。
//	male = 2,//0
//	female = 4,//1
//	secret = 6//2
//};
//
//int main()
//{
//	enum sex s = male;//只能拿枚举常量给枚举变量赋值,才不会出现类型的差异。
//	s = female;
//	return 0;
//}   

//联合体--成员共用一块空间
//union un
//{
//	char c;
//	int i;
//};
//
//int main()
//{
//	union un u; 
//	printf("%d\n", sizeof(u));//4
//	printf("%p\n", &u);
//	printf("%p\n", &(u.c));
//	printf("%p\n", &(u.i));//地址是一样的,c和i共用一块空间;
//	return 0;
//}


//联合体的大小最少是最大成员的大小。
//当最大成员大小不是最大对齐数的整数倍的时候,就要对齐到最大对齐数的整数倍;
//union un
//{
//	int a;//对齐数是4
//	char arr[5];//对齐数是1,数组的对齐数算的是元素的对齐数
//};
//int main()
//{
//	union un u;
//	printf("%d\n", sizeof(u));//8
//	return 0;
//}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值