C语言 自定义类型

在C语言当中,除了我们常用的几个基本的数据类型之外,还有一种类型叫自定义类型。比如:我们要描述一个学生。这个学生有姓名,性别,年龄,身高等。单独用基本的数据类型是不能完全描述的。这个时候就要使用我们自定义的类型来进行描述。自定义的类型有结构体,枚举和联合体。

一、结构体

结构体时一些值得集合,这些值被称为成员变量,每一个成员变量可以有不同的类型。

1,声明

struct tag//这里的tag表示标签,不是变量名

{

        member-list;//成员变量

}variable-list;//变量列表,用来定义变量。注意这里的分号

比如,描述一个人:

struct person
{
	char name[20];
	char sex[5];
	int age;
	char nation[20];
};

这里的变量列表可以没有。在变量列表里面定义的变量是全局变量。

2,定义且初始化

要定义,可以直接在变量列表里面,也可以在main函数里面定义。

struct person
{
	char name[20];
	char sex[5];
	int age;
	char nation[20];
}person1;//结构体变量person1

struct person person2;//结构体变量person2

int main(void)
{
	struct person person3;//结构体变量person3
    struct person person4[2];//结构体数组变量person4,有两个元素,都是结构体类型
    return 0;
}

要初始化也很简单。

#include<stdio.h>

struct person
{
	char name[20];
	int age;
}person1 = {"zhangsan", 18};//结构体变量person1

struct person person2 = {"lisi", 18};//结构体变量person2

int main(void)
{
	struct person person3 = {"wangwu", 18};//结构体变量person3
	struct person person4[2] = 
	{"abc", 18, {"def", 18}};//加不加{}都可以

	return 0;
}

有的时候,结构体还会出现嵌套的情况:

struct person
{
	char name[20];
	int age;
}person1 = {"zhangsan", 18};//结构体变量person1

struct people
{
	struct person person;
	char nation[20];
};

 对其进行初始化:

struct people people = { {"zhangsan",18}, "XXX" };//嵌套结构体的初始化

我们在声明结构体的时候,也可以不完全声明,这个时候省略掉标签。

struct
{
 int a;
 char b;
 float c;
}a;

有一种情况是不可以省略标签的,即使用typedef关键字的时候。typedef关键字能够为一种数据类型定义一个新名字。如果省略,就会报错。

typedef struct S
{
	int data[1000];
	int num;
}s;
	s s1 = { {1,2,3,4}, 1000 };

3,结构体成员的访问

结构体成员的访问需要通过点(.)操作符来进行访问的。下面我们来打印这几个初始化的变量。

#include<stdio.h>

struct person
{
	char name[20];
	int age;
}person1 = {"zhangsan", 18};//结构体变量person1

struct people
{
	struct person person;
	char nation[20];
};

struct person person2 = {"lisi", 18};//结构体变量person2

int main(void)
{
	struct person person3 = { "wangwu", 18 };//结构体变量person3
	struct person person4[2] = 
	{"abc", 18, {"def", 18}};//加不加{}都可以

	struct people people = { {"zhangsan
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值