C语言用户自定义数据类型
一、结构体
定义语法:
struct [名称]
{
成员列表;
}[变量列表];
示例程序:
#include
#include
struct Student
{
int age;
char *name;
char sex;
} Davlid={24,"Davlid",'M'};
struct
{
int age;
char name[20];
} Tom;
int main()
{
struct Student Mike={1,"MIKE"};//初始化
struct Student Rubin={.age=10};
return 0;
}
可部分初始化。
同类的结构体可互相赋值如:Mike=Rubin;
结构体指针及成员引用。不可以取结构成内部成员的地址。也就是说不可以指向内部
成员变量。
struct Student *p;
p->age;
Mike.age;
return 0;
结构体变量属于值类型,当作参数时属于值传递,结构体指针属于址类型
当作参数是属于址传递。
二、共用体
用同一段内存,存放不同类型的变量,共用体所占内存是内部等于内部占字节数
最大的一个变量所占的字节。且任何一个时刻,内存中的这段单元只能存放一个
有效的变量内容。
语法:
union Test
{
int age;
char sex;
float soloar;
};
union Test test001;
test001.sex='M';
printf("%c\n",test001.sex);
test001.age=10;
printf("%d\n",test001.age);//引用成员,这样才知道应该取多少字节的数据。
return 0;输出:
M
10
其它使用和初始化方式类似结构体。
三、枚举类型
定义一个变量只能取指定的值。
语法:
enum [枚举名称]
{
元素列表;
}[变量列表];
如:
enum Weekday
{
sun,mon,tue,wed,thu,fri,sat
};
元素默认从0开始,往上自动加1 ,也可指定指定值。
#include
#include
enum Weekday
{
sun,mon,tue,wed,thu,fri,sat
};
int main()
{
enum Weekday week;
week=sun;
printf("%d\n",week);
return 0;
}
输出:
0
四、用typedef声明新类型名
按定义变量的方式,把变量名换成新类型名,再在最前面加上typedef,就声明了新类型
以后就可以使用该类型名称,声明这个类型的变量了。
如:
typedef int num[100];
num a; 相当于int a[100];
typedef int Integer;
Integer a;相当于 int a;
typedef int Num[4];
int main()
{
Num a={1,2,3,4};
return 0;
}