c language structure, union, enum, string

#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <string.h>
#include <stddef.h>
//自定义数据类型:结构体,枚举,联合
//C语言中结构体不能为空
//typedef struct student
//{
//	int nun;
//	char name[20];
//	int age;
//}STU;//<-类型
//struct node
//{
//	int n;
//	struct node *next;//确定了大小,指针有四个字节
//};
//
//int main(){
//	struct student a;
//	printf("%d\n", sizeof(struct student));
//	system("pause");
//	return 0;
//}

//*结构体的内存对齐
//struct s1{
//	char c1;
//	
//	char c3;
//	int c2;
//};
//struct s2{
//	char c1;
//	int c2;
//	char c3;
//};
//struct s3{
//	struct s1 a;// 8
//	int c2;// 4
//	char c3[15];// 15
//};
//1.第一个成员永远都放在结构体起始位置的0偏移量处                *
//2.从第二个成员开始,每个成员都放在某个对齐数的整数倍的偏移量处 *
//  某个对齐数:min(成员自身对齐数,默认对齐数)                *
//  VS:8   LINUX gcc:4
//3.结构体的总大小是所有成员对齐数中的最大值的整数倍


//int main(){
//	printf("%d\n", offsetof(struct s3, a));
//	printf("%d\n", offsetof(struct s3, c2));
//	printf("%d\n", offsetof(struct s3, c3));
//	printf("%d\n", sizeof(struct s3));
//	system("pause");
//	return 0;
//}

//typedef struct student{
//	int num;
//	char name[20];
//	char sex;
//}STU;
//int main(){
//	STU a = { 1, "zhangsan", 'f' };//初始化以及赋值
//	STU b;//初始化
//	b.num = 2;//赋值
//	strcpy(b.name, "lisi");//赋值
//	b.sex = 'm';//赋值
//	STU c;
//	STU *p = &a;//赋值
//	c = { 3, "wangwu", 'm' };
//	printf("%d,%s,%c\n", a.num, a.name, a.sex);
//	printf("%d,%s,%c\n", b.num, b.name, b.sex);
//	printf("%d,%s,%c\n", c.num, c.name, c.sex);
//	printf("%d,%s,%c\n", (*p).num, p->name, p->sex);
//	system("pause");
//	return 0;
//}

//#pragma pack(1)
//struct data{
//	int a;
//	char c;
//};
//int main(){
//	printf("%d\n", offsetof(struct data, a));
//	printf("%d\n", offsetof(struct data, c));
//	printf("%d\n", sizeof(struct data));
//	system("pause");
//	return 0;
//}

//位段的内存分布:以四个字节或者一个字节开辟
//                int、  unsigned int 、 signed int
//                存在很多不确定的因素
//struct A{
//	int a : 2;
//	int b : 5;
//	int c : 10;
//	int d : 30;
//};
//int main(){
//	printf("%d\n", sizeof(struct A));
//	system("pause");
//	return 0;
//}

//枚举:列举
//enum week{Mon=1,Tues,Wed,Thu,Fri,Sat,Sun};
//int main(){
//	enum wekk w;
//	w = Thu;
//	printf("%d\n", w);
//	system("pause");
//	return 0;
//}

//联合(共用体):共用同一块空间
//union data{
//	int a;
//	char b;
//	double c;
//};
//union data{
//	int i;
//	char c;
//};
//int main(){
//	union data d;
//	d.i = 0x11223344;
//	d.c = 0x55;
//	/*printf("%p\n", &(aa.a));
//	printf("%p\n", &(aa.b));
//	printf("%p\n", &(aa.c));*///三个地址空间,同一个
//	printf("%x\n", d.i);
//	printf("%x\n", d.c);
//	system("pause");
//	return 0;
//}


Guess you like

Origin blog.csdn.net/qq_44783220/article/details/90577804