成都创新互联网站制作重庆分公司

C语言入门系列-结构体-创新互联

C语言入门系列 - 结构体

第一节 C 语言基础以及基本数据类型
第二节 C 语言运算符
第三节 C 语言控制语句
第四节 C 语言自定义函数
第五节 C 语言修饰变量的关键字
第六节 C 语言构造数据类型–数组
第七节 C 语言字符串
第八节 C 语言指针
第九节 指针与函数、指针函数、函数指针
第十节 数组与指针、二级指针&NULL&void 指针
第十一节 结构体

创新互联建站是一家集网站建设,毕节企业网站建设,毕节品牌网站建设,网站定制,毕节网站建设报价,网络营销,网络优化,毕节网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。

文章目录
  • C语言入门系列 - 结构体
  • 前言
  • 一、结构体是什么?
  • 二、结构体类型
    • 1.声明结构体类型
    • 2.结构体变量
    • 3.容易混淆的概念
      • 3.1给类型起个别名
      • 3.2在定义结构体的时候直接定义结构体变量或者结构体指针,结构体数组
    • 4.结构体成员在内存中分布
    • 5.结构体变量初始化
    • 6.结构体数组
      • 6.1结构体数组定义
      • 6.2结构体数组初始化
    • 7.结构体指针
    • 8.注意点
  • 总结


前言

基本数据类型
数组类型
指针类型
结构体也是数据类型。

统计一个班的成绩 – 数组 {620,720,530}
有大有小,按照成绩排序-- 最高分,
但是如果需要知道谁是最高分 – 同学的名字获取不到。
每一个学生的成绩和姓名放在一起,按照成绩排序后,就可以得到这个学生的名字。
存储成绩 — float 类型
存储名字 – 字符串 – 字符数组类


一、结构体是什么?

  结构体就是用来存储不同数据类型的数据,将某一个物体的属性抽离出来,保存在一起形成一个整体。
  将学生主体里面的成绩和姓名属性抽离出来,放在一起形成一个学生的整体。

二、结构体类型 1.声明结构体类型

是一种自定义数据类型。
  结构体关键字:struct
  结构体起个名字:自定义 Student
  属性需要使用{}
  {}里面的语法: 属性类型 属性名; 属性名自定义

struct Student
{//成绩 -- float 类型
	float score;
	//姓名 -- 字符数组类型
	char names[21];
};

数据类型的名字:struct Student   类似于 int float char

2.结构体变量

数据类型是规定空间多大。
开空间 – 定义变量。 数据类型 变量名
数据类型:struct Student

代码如下(示例):

struct Student s1;
	//开空间的时候会按照里面属性的顺序进行分配空间。
	//通过变量定位到属性,可以采用 点语法 结构体变量.属性名
	//s1.score
	scanf("%f",&s1.score);
	//s1.names
	scanf("%s",s1.names);
3.容易混淆的概念 3.1给类型起个别名

1、先定义在起别名:
typedef 数据类型 别名;

typedef struct Student student;
	//直接使用别名定义变量
	student s1;

2、在定义结构体的时候直接起别名。

//第一种方法
	typedef struct Student
	{float score;
		char names[21];
	}student;
	//第二种方法
	typedef struct
	{float score;
		char names[21];
	}student;
3.2在定义结构体的时候直接定义结构体变量或者结构体指针,结构体数组
typedef struct Student
	{float score;
		char names[21];
	}s1,s2;		//s1、s2是结构体变量

总结:有 typedef{}后面就是类型名称,不加 typedef{}后面就

4.结构体成员在内存中分布

结构体属性在内存是按照结构体定义的顺序进行分配空间。
分配的时候遵循字节对齐的原则。
字节对齐:
  首先找到占用字节数大的成员,以这个成员所占字节为单位进行分配空间。
  成员首地址距离结构体变量的首地址必须保证是成员所占字节数的正数倍。

struct test1
{int a; // 4
	float b; // 4
	short c; // 2
}
//发现占用空间数最多的是 4,那么分配空间的时候就是以 4 为单位进行分配
printf("%d",sizeof(struct test1)); // 12

struct test2
{char a; // 1
	short b; // 2
	int c; //4
};
printf("%d",sizeof(struct test2)); // 8

在这里插入图片描述

5.结构体变量初始化

定义变量就给值。

代码如下(示例):

struct Student s1 = {720,"lili"};
	printf("%f %s",s1.score,s1.names);
6.结构体数组 6.1结构体数组定义

数组:元素数据类型 数组名[元素个数]

代码如下(示例):

struct Student
	{float score;
		char names[21];
	};
	struct Student arr[3];
	//第一个结构体 :arr[0] -- arr[0].score arr[0].names
	//第二个结构体: arr[1]
	//第三个结构体: arr[2]
	arr[0].score = 650;	
	// *(arr[0].names) -- char 空间 arr[0].names[0]	就一个char
	strcpy(arr[0].names,"小明");
	printf("%f %s",arr[0].score,arr[0].names);
6.2结构体数组初始化

代码如下(示例):

struct Student arr[3] = {{650,"小明"},{530,"小白"},{620,"小兰"}};
	
	int i;
	for(i=0;i<3;i++)
	{printf("%f %s\n",arr[i].score,arr[i].names);
	}
//怎么获取结构体数组的长度? sizeof(arr) / sizeof(struct
7.结构体指针

指针:指向对象的数据类型 *指针名
通过结构体指针操作 指向的结构体成员可以用 ->成员访问符号

struct Student s1 = {560,“小白”};
struct Student *p;
	p = &s1
//通过结构体指针操作 指向的结构体成员可以用 ->成员访问符号
printf("%f %s",p->score,p->names);
scanf("%f %s",&p->score,p->names);

结构体指针指向— 动态申请的地址

struct Student *p = (struct Student *)malloc(sizeof(struct Student))
8.注意点

1、结构体变量除了初始化之外,不能整体赋值
2、可以整体拷贝。
在这里插入图片描述
在这里插入图片描述

两个结构体变量交换值。
代码如下(示例):

#includestruct Student
{float score;
	char names[21];
};
int main()
{struct Student s1 = {720,"小白"};
	struct Student s2 = {530,"小兰"}
	struct Student temp;
	temp = s1;
	s1 = s2;
	s2 = temp;
	printf("%f %s\n",s1.score,s1.names);
	printf("%f %s\n",s2.score,s2.names);
	return 0;
}

总结

  结构体就是用来存储不同数据类型的数据,将某一个物体的属性抽离出来,保存在一起形成一个整体。
  是一种自定义数据类型。
  结构体关键字:struct
  结构体起个名字:自定义 Student
  属性需要使用{}
  {}里面的语法: 属性类型 属性名; 属性名自定义
取别名

//第一种方法
typedef struct Student
{
  float score;
  char names[21];
}student;
//第二种方法
typedef struct
{
  float score;
  char names[21];
}student;

直接定义结构体变量

typedef struct Student
	{float score;
		char names[21];
	}s1,s2;		//s1、s2是结构体变量

结构体属性在内存是按照结构体定义的顺序进行分配空间。
结构体变量除了初始化之外,不能整体赋值。
可以整体拷贝。

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


名称栏目:C语言入门系列-结构体-创新互联
新闻来源:http://cxhlcq.com/article/dcphdg.html

其他资讯

在线咨询

微信咨询

电话咨询

028-86922220(工作日)

18980820575(7×24)

提交需求

返回顶部