c语言----结构体

c语言----结构体

常量符号化:const

​ 定义:const修饰的数据类型是指常类型,常类型的变量或对象的值是不能被更新的。

​ 作用:

  1. 可以定义const常量,具有不可变性。
  2. 便于进行类型检查,使编译器对处理内容有更多了解,消除了一些隐患。
  3. 可以避免意义模糊的数字出现,同样可以很方便地进行参数的调整和修改
  4. 保护被修饰的东西,防止意外的修改
  5. 可以节省空间,避免不必要的内存分配
const int yellow=1;
const int red=2;
const int green=3;

枚举

定义:枚举是用户定义的一种数据类型,用关键字enum

用法:enum 枚举类型的名字 {名字0,名字1,名字2........};

如:enum colors{red,yellow,green};

​ 枚举的类型名字不是真的需要,要用的是大括号里面的常量符号,他们的类型为int型,值依次从0到n

enum colors{red,yellow,green};//申明一种枚举类型
/*意思:  red=0
		yellow=1
		green=2
*/
enum colors c	//定义一个变量c,它的类型为枚举类型colors

​ 声明枚举量时可以指定值。指定值后面的值在在指定值的基础上加1

enum colors {red,yellow,green=5,blue}
/*意思:  red=0
		yellow=1
		green=5
		blue=6
*/

总结:枚举用的少(不好用)

结构体

声明结构体

第一种形式

//第一种形式
struct data{		//声明一个结构体类型:data
    int month;
    int day;
    int year
};
struct data today;	//定义data结构体类型的一个变量:today

today.month=2;		//使用 today这种结构体变量
today.day=15;
today.year=2020;

第二种形式

//第二种形式
struct data{		//声明一个结构体类型:data
    int month;
    int day;
    int year
}today;			//定义data结构体类型的一个变量:today

第三种形式

//第三种形式
struct {			//没有结构类型名
    int month;
    int day;
    int year
}today;			//定义data结构体类型的一个变量:today
  1. 如果结构体的声明放在函数里面,那只有这个函数能使用,其他函数不能使用
  2. 如果结构体的声明放在函数外面,多个函数可以使用这个结构体

结构体初始化

struct data{		//声明一个结构体类型:data
    int month;
    int day;
    int year
};
//方式一
struct today={2,15,2020}	//month=2;day=15;year=2020;
//方式二
struct today={.month=2,.day=15,.year=2020}//如果缺省,则为零

结构体成员

访问结构体成员的方式结构体变量+.+成员名

eg:today.month

结构运算

对于整个结构,可以赋值,取地址,也可以传递给函数参数

//第一种形式
struct data{		//声明一个结构体类型:data
    int month;
    int day;
    int year
};
struct data today,pre_today;	//定义data结构体类型的一个变量:today

today=(struct data){2,15,2020};	//赋值
pre_today=today;

结构指针

​ 和数组不同,结构体变量并不是结构体变量的地址,必须使用&运算符

struct data *pdata=&today定义了一个结构体变量,此结构体指向today的地址

struct data *pdata=&today;	//定义一个结构体指针变量
printf("年:%d\n",pdata->year);

->表示指针所指的结构体变量的成员

结构体和函数

结构体作为函数参数

int numberdays(struct data d)

整个结构可以作为参数值传入函数

这是是在函数内新建一个结构体变量,并复制调用的结构体值

也可以返还一个结构

结构体输入

方法一:建立临时结构体,并返还此结构体

struct data getstruct()
{
	struct data d;
	scanf("%d",&d.year);
	scanf("%d",&d.month);
	scanf("%d",&d.day);
	return d;
}
//使用:
today=getstruct();

方式二:传入结构体变量

void getstruct1(struct data *d)
{
	scanf("%d",&d->year);
	scanf("%d",&d->month);
	scanf("%d",&d->day);
}
//使用
	getstruct1(&today);

结构中的结构

结构数组

#include"stdio.h" 
struct data{		//声明一个结构体类型:data
    int month;
    int day;
    int year;
};
struct data d[3]={		//定义结构体数组
	{2,15,2020},
	{2,16,2020}, 
	{2,16,2020}
};
void main()
{
	int i;
	for(i=0;i<3;i++)//遍历结构体
	{
		printf("第%d此输出:%d年%d月%d日\n",i,d[i].year,d[i].month,d[i].day);
	}
}

结果:
在这里插入图片描述

结构中嵌套结构

struct data_and_time{
    struct data;
    struct time;
};
struct data_and_time ds
struct data_and_time *d_s;	//定义一个结构体指针变量
ds.data.year=2020;//引用某个成员
d_s=&ds;
d_s->data.year=2020;//引用某个成员 

没有d_s->data->data=2020因为data不是一个指针

联合

自定义数据类型(typedef)

c语言提供一个叫typedef的功能来声明一个已有的数据类型的新名字。比如:

typedef int length;

使得length成为int类型的别名

这样,length这个名字就可以代替int出现在变量定义和参数声明的地方了

typedef struct Data{
    int month;
    int day;
    int year;
} data;				//用data代替了Data这个结构体
data d;				//等价于struct Data d;

明一个已有的数据类型的新名字。比如:

typedef int length;

使得length成为int类型的别名

这样,length这个名字就可以代替int出现在变量定义和参数声明的地方了

typedef struct Data{
    int month;
    int day;
    int year;
} data;				//用data代替了Data这个结构体
data d;				//等价于struct Data d;

typedef *a[10] strings strings是10个字符串的数组类型
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值