自定义类型(结构体,枚举,联合)
代码练习
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
struct tag
{
member - list;
}variable-list;
struct Student
{
char name[20];
short age;
char sex[5];
}stu1, stu2, stu3;
int main()
{
struct Student stu4;
return 0;
}
struct
{
char name[20];
short age;
char sex[5];
}stu1;
struct
{
char name[20];
short age;
char sex[5];
}* ps;
int main()
{
ps = &stu1;
return 0;
}
struct Node
{
int data;
struct Node* next;
};
int main()
{
struct Node n;
return 0;
}
typedef struct Node
{
int data;
struct Node* next;
}Node;
int main()
{
struct Node n;
return 0;
}
#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>
struct S1
{
char c1;
int i;
char c2;
};
struct S2
{
char c1;
char c2;
int i;
};
struct S3
{
double d;
char c;
int i;
};
struct S4
{
char c1;
struct S3 s3;
double d;
};
int main()
{
struct S1 s1 = {0};
printf("%d\n", sizeof(struct S1));
printf("%d\n", sizeof(struct S2));
printf("%d\n", sizeof(struct S3));
printf("%d\n", sizeof(struct S4));
struct S2 s2 = {0};
printf("%d\n", offsetof(struct S1, c1));
printf("%d\n", offsetof(struct S1, i));
printf("%d\n", offsetof(struct S1, c2));
结构体大小 = (偏移量 + 1 )个 (取整最大对齐数整数倍)
struct S1 s1 = {0};
printf("%d\n", sizeof(struct S2));
printf("%d\n", sizeof(s1));
system("pause");
return 0;
}
struct S
{
char c;
int i;
};
#define offsetof(s,m) (size_t)&( ((s *)0)->m )
int main()
{
printf("%d\n", offsetof(struct S, c));
printf("%d\n", offsetof(struct S, i));
system("pause");
return 0;
}
#pragma pack(2)
struct S
{
double d;
char c;
};
#pragma pack()
int main()
{
printf("%d\n", sizeof(struct S));
system("pause");
return 0;
}
struct S
{
int i;
char c;
};
int main()
{
return 0;
}
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;
}
struct S
{
char a:3;
char b:4;
char c:5;
char d:4;
};
int main()
{
struct S s = {0};
printf("%d\n", sizeof(struct S));
s.a = 10;
s.b = 12;
s.c = 3;
s.d = 4;
system("pause");
return 0;
}
enum Day
{
Mon=100,
Tues,
Wed,
Thur,
Fri,
Sat,
Sun
};
int main()
{
enum Day day = Mon;
day = Tues;
printf("%d\n", day);
printf("%d\n", sizeof(day));
system("pause");
return 0;
}
union Un
{
char i;
int c;
};
int main()
{
union Un u = {0};
u.c = 0x12345678;
u.i = 0x00;
return 0;
}
union Un1
{
char c[5];
int i;
};
union Un2
{
short c[7];
int i;
};
int main()
{
printf("%d\n", sizeof(union Un1));
printf("%d\n", sizeof(union Un2));
system("pause");
return 0;
}
int check_sys()
{
int a = 1;
return *(char*)&a;
}
int main()
{
int ret = check_sys();
if(ret == 1)
printf("小端\n");
else
printf("大端\n");
return 0;
}
int check_sys()
{
union
{
char c;
int i;
}u;
u.i = 1;
return u.c;
}
int main()
{
int ret = check_sys();
if(ret == 1)
{
printf("小端\n");
}
else
{
printf("大端\n");
}
return 0;
}
union Un
{
char c[5];
int i;
};
int main()
{
printf("%d\n", sizeof(union Un));
return 0;
}
结构体,联合 --> 需要内存对齐