自定义类型(结构体,枚举,联合)
代码练习
#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 ;
}
结构体,联合 -- > 需要内存对齐