栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

结构类型轻松入门(C语言)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

结构类型轻松入门(C语言)

前言 

当我们在录入大量信息或者需要大量信息时,我们会怎么做?比如说我们要录入小明的成绩,我们可以设置个变量来接收。那如果?小美,小方,甚至全班同学的成绩,甚至他们的语文数学英语成绩,这时候定义的工作量是非常大的,怎么做?我们要一个一个来么?下面介绍三种结构类型让我们的代码更简洁、更工整、更规范。

本篇文章会多次结合黄金矿工的代码,结合我的黄金矿工教程食用效果更佳(我鸽了啊?那没事了~~~~~~)

 目录

前言 

枚举

结构

声明结构的形式

结构变量的初始化

结构运算

结构指针作为参数

枚举

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

enum name //定义枚举名字
{
	xiaoming, 
	xiaomei, 
	xiaozhang, 
	xiaolan
};

要知道的是,枚举量可以作为值。

同数组类似,枚举名字中,xiaoming对应的就是 名字0,xiaomei对应的为名字1,自然,xiaolan对应的为名字3。

这时可以来一个小技巧,我们枚举量过多时,一个一个数枚举量很麻烦,我们只要在枚举后加一个工具枚举量作为下标即可。

下面为黄金矿工部分代码。

enum MINE_TYPE //物品类型枚举
{
	GOLD,
	MONEY,
	STONE,
	//方向
	LEFT,
	RIGHT,
	//状态,正常,伸长,缩短
	M_NOMAL,
	M_LONG,
	M_SHORT,
};

枚举实际当中使用深度并不大,因为在C语言之中枚举并不成功,常用来作为排比的名字,比const int更加方便,比宏(macro)好,因为枚举有int类型。


结构

我们可以用枚举来定义一个班级的名字,但是我们怎么处理他们的成绩呢?语文数学英语。

一个一个定义很麻烦,三个还好,如果更多怎么办?物化生政史地......

我们可以用结构来处理这个问题

struct rank {
	int chinese;
	int math;
	int english;
	int history;
	//等等
};

我们这样就很公整得定义出了这么多的成绩。

怎么用呢?比如我们想输入成绩。

#include
struct rank {
	int chinese;
	int math;
	int english;
	int history;
	//等等
};
int main()
{
//struct rank为变量类型,xiaoming为变量名字。
	struct rank xiaoming;
	xiaoming.chinese = 95;
	xiaoming.english = 59;
	xiaoming.math = 20;
	xiaoming.history = 99;
	printf("小明语文%i分n小明数学%i分n小明英语%i分n",
		xiaoming.chinese, xiaoming.math, xiaoming.english);

	return 0;
}

 要知道的是,和本地变量一样,在函数内声明的结构只能在函数内使用,所以通常在函数外声明结构类型,这样既可被多个函数使用。

声明结构的形式

1,单纯声明并单独给出变量

struct rank {
	int chinese;
	int math;
	int english;
};
struct point xiaoming,xiaomei;

//xiaoming和xiaomei都是rank
//里面有chinese,math和english的值

2,无名结构,省去了结构类型名字

struct  {
	int chinese;
	int math;
	int english;

};xiaoming,xiaomei;

3,第一种和第二种的结合,也是我们最常见的一种。可以同时干两件事。

struct rank {
	int chinese;
	int math;
	int english;

}xiaoming,xiaomei;

结构变量的初始化

怎么给结构变量赋值呢?

和数组与枚举一样,chinese为0,math为1,english为2。

	struct rank xiaoming = { 95,20,59 };
	struct rank xiaomei = { .math = 100, .english = 100 };

那数组和结构这么像,它们之间有什么不同的地方吗?

定义一个数组之后,数组的每一个变量都为同一个类型。

是int 那么这个数组每一个变量都是int型;

是long 那么这个数组每一个变量都是long型;

是char那么这个数组每一个变量都是char型。

定义结构就相当的宽松了,这个结构里可以有int,可以有char,可以有指针变量,甚至可以有结构,甚至可以有数组,甚至甚至可以有结构里装着结构装着数组装着结构.......

struct azhuizuishuai {
	int a;
	char b;
	int ac[5];
	struct ku {
		long c;
		int* p;
	};
};

那么我们现在可以知道,结构是非常自由的,归类会经常用。可以让我们的代码更清晰,更容易访问。

结构运算

可以直接给结构赋值,可以直接给结构赋值

也可以给结构整体进行赋值,取地址,传参数。

struct rank{
	int chinese;
	int math;
	int english;
};
int mian()
{
	struct rank xiaoming;定义小明
	xiaoming = (struct rank){98,20,59};给小明成绩赋值
	struct rank xiaoxiaoming;定义小小明
	xiaoxiaoming = xiaoming;//小明成绩赋值给小小明
		printf("%in%in%i", 
		xiaoming.chinese, xiaoming.math, xiaoming.english);
	return 0;
}

结构是可以作为函数参数的,延展性很长,本文只作引出

int chengji(struct rank xiaoming)

结构指针作为参数

由于用指针更加轻便,能传结构则不如传一个指针。

指向结构的指针

struct rank {
	int chinese;
	int math;
	int english;
};
struct rank xiaoming;
struct rank * p = &xiaoming;

(*p).chinese = 98;
p->chinese = 98;

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

结构数组,只作引出。

struct rank class[40] = {
	{55,22,10}{......}{.....}....
}

 

由于结构和其他知识的嵌套比较复杂,甚至结构与结构的嵌套,后面还需要大家多多练习。

嵌套的结构怎么访问?

如果我们要表示图形的坐标

struct point {
	int x;
	int y;
};
struct page {
	struct point p1;
	struct point p2;
};    

如果我们要找到点1的x

可以有struct page point x;

那么我们可以有几种方式来访问

如果有下面变量定义:

struct page r, * rp;
rp = &r;

我们可以这样来表示

r.p1.x
rp->p1.x
(r.p1).x
(rp.p1).x
//但是不可以rp->p1->x(因为p1不是指针)

以上两种定义结构类型我们都进行了初步了解。

剩下来的联合,敬请期待下次更新!


懊恼没有半分意义,珍惜现在的每分每秒

博客持续更新中,啊追也在和大家一起学习

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/395814.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号