C言語構造体と共同体
18731 ワード
1.構造体
2.構造体ポインタ
3.共同体
転載先:https://www.cnblogs.com/changchou/p/6203305.html
1 #include
2
3 // File
4 struct File {
5 char *name;
6 int size;
7 };
8
9 // People typedef
10 struct _People {
11 char *name;
12 int age;
13 };
14
15 typedef struct _People People;
16
17 // Person typedef
18 typedef struct _P {
19 char *name;
20 int age;
21 } P;
22
23 int main() {
24
25 // File
26 struct File file;
27 file.name = "Clion";
28 file.size = 100;
29
30 printf("File name is %s,File size is %d.
", file.name, file.size);
31
32 //---------------------------------------------------------------------
33 People people = {"Susan", 20};
34
35 printf("Name is %s,Age is %d.
", people.name, people.age);
36
37 //---------------------------------------------------------------------
38 P p = {"Alex", 22};
39 printf("Name is %s,Age is %d.
", p.name, p.age);
40
41
42 return 0;
43 }
2.構造体ポインタ
1 #include
2 #include
3
4 typedef struct _Student {
5 const char *name;
6 int age;
7 } Student;
8
9 void func() {
10 Student *s4 = malloc(sizeof(Student));
11 s4->name = "Lucy";
12 s4->age = 18;
13 Student *s5 = s4;
14 s4->age = 20;
15 printf("(%s, %d),(%s, %d)
", s4->name, s4->age, s5->name, s5->age);
16 }
17
18 Student *createStudent(char *name, int age) {
19 Student *s = malloc(sizeof(Student));
20 s->name = name;
21 s->age = age;
22 return s;
23 }
24
25 void deleteStudent(Student *p) {
26 free(p);
27 }
28
29 int main() {
30
31 Student s1 = {"Jim", 16};
32 Student s2 = s1;
33 printf("(s1.name = %s,s1.age = %d),(s2.name = %s,s2.age = %d)
", s1.name, s1.age, s2.name, s2.age);
34 s2.age = 20;
35 printf("(s1.name = %s,s1.age = %d),(s2.name = %s,s2.age = %d)
", s1.name, s1.age, s2.name, s2.age);
36
37 printf("
");
38 //
39 Student *s3 = &s1;
40 s1.age = 30;
41 printf("(s1.name = %s,s1.age = %d),(s3.name = %s,s3.age = %d)
", s1.name, s1.age, s3->name, s3->age);
42
43 //-----------------------------------------------------------------------------------------------------
44 printf("
");
45 func();
46
47 //-----------------------------------------------------------------------------------------------------
48 printf("
");
49 Student *s = createStudent("Daisy", 22);
50 printf("%s, %d
", s->name, s->age);
51 deleteStudent(s);
52
53
54 return 0;
55 }
3.共同体
1 #include
2 #include
3
4 //
5 typedef union _BaseData {
6 char ch;
7 uint8_t ch_num;
8 uint32_t num;// sizeof(BaseData) 4 -->
9 } BaseData;
10
11 //
12 typedef struct _Data { //
13 uint8_t a; //1 Data 1
14 uint8_t b; //1 Data 2
15 uint32_t c; //4 Data 8
16 uint8_t d; //1 Data 12
17 }__attribute__((__packed__)) Data; //__attribute__((__packed__))
18
19 //
20 typedef struct _ColorARGB {
21 uint8_t blue;
22 uint8_t green;
23 uint8_t red;
24 uint8_t alpha;
25 } ColorARGB;
26
27 typedef union _Color {
28 uint32_t color; //0xFFFEED2B 0x2B 0xED 0xFE 0xFF
29 ColorARGB colorArgb;
30 } Color;
31
32 int main() {
33
34 BaseData data;
35 data.ch = 'B';
36 printf("ch_num is %d
", data.ch_num);
37 printf("Length of BaseData is %ld
", sizeof(BaseData));
38
39 //---------------------------------------------
40 printf("
");
41 printf("Length of Data is %ld
", sizeof(Data));
42
43 //-----------------------------------------------
44 printf("
");
45 Color c;
46 c.color = 0xFFFEED2B;
47 printf("alpha = 0x%X,red = 0x%X,green = 0x%X,blue = 0x%X.
",c.colorArgb.alpha,c.colorArgb.red,c.colorArgb.green,c.colorArgb.blue);
48
49 return 0;
50 }
転載先:https://www.cnblogs.com/changchou/p/6203305.html