C语言学习之路
第一章 初识C语言
第二章 变量
第三章 常量
第四章 字符串与转义字符
第五章 数组
第六章 运算符
第七章 指针(初识)
第八章 结构体
文章目录
前言
当我们学完前面的知识后,我们对C语言有了一个基础的了解。但是我们发现,C语言中的基础的数据类型有的时候无法满足我们的需求。那么这一章的内容将带量大家了解如何利用基础数据类型之间的随机组合来创建一个属于我们的自定义数据类型。
一、什么是结构体?
结构体其实就是我们创建的自定义数据类型,即由各种基础的数据类型(整型、浮点型、字符型…)所组成的结构。
二、结构体语法:
1、结构体的定义:
(1)代码示例:
struct person
{
int m_age;
double m_weight;
char m_name[30];
};
(2)代码详解:
首先我们先抽象出其背后的语法。
struct 结构体名称
{
一些基础的数据类型
};
2、结构体变量的创建:
(1)代码示例:
struct person
{
int m_age;
double m_weight;
char m_name[30];
};
int main()
{
//第一种创建方式:
struct person p1={18,55.5,"Turing-Sheep"};
//第二种创建方式:
struct person p2;
p2.m_age=18;
p2.m_weight=56.5;
p2.m_name[]="tom";
//第三种创建方式:
struct person p3;
struct person* pointer=&p3;
pointer->m_age=18;
pointer->m_weight=45.6;
pointer->m_name[30]="denny";
return 0;
}
(2) 代码详解
a.第一种创建方式:
struct 结构体的名称 变量名称 ={结构体中每个类型的初始值};
这种创建方式体现的是一种数组的思想,什么意思呢?
我们从形式上观察,我们会发现括号内的形式和数组的定义非常相似。但是二者的区别在于,结构体的大部分属性是不同的数据类型,但是数组的内部元素的数据类型是相同的。
b.第二种创建方式:
struct 结构体名称 变量名称 ;
变量名称 . 对应的属性1 = 初始值1 ;
变量名称 . 对应的属性2 = 初始值2 ;
变量名称 . 对应的属性3 = 初始值3 ;
变量名称 . 对应的属性4 = 初始值4 ;
这种创建方式的背后体现的是一种总分的思想。什么意思呢?
我们会发现,变量名称就是总,然后我们以一个符号.
来访问结构体内的属性,接着再进行赋值。
c.第三种创建方式:
struct 结构体名称 变量名称 ;
struct 结构体名称 * 指针名称 = 变量名称;
指针名称 -> 对应的属性1 = 初始值1 ;
指针名称 -> 对应的属性2 = 初始值2 ;
指针名称 -> 对应的属性3 = 初始值3 ;
指针名称 -> 对应的属性4 = 初始值4 ;
指针名称 -> 对应的属性5 = 初始值5 ;
这种方式是第二种创建方式的一个变体。只是在第二种方式的基础上增添了一些指针的思想。
我们把变量名称前面的所有东西直接复制下来,然后通过*
创建了一个指向结构体的指针,从而指向了这个结构体变量,记录了它的地址。那么他是指针,自然就不能利用.
来访问一个结构体的分属性了。因此,我们就换了一个符号,这个符号形似指针,即->
。
3、结构体变量的使用:
(1)代码示例:
printf("%d", p2.m_age=18;);
printf("%d",pointer->m_name[30]="denny";);
(2)代码详解:
这里我们首先要摆脱一个误区。
在学习结构体之前,我们可以直接打印一个整型等基础的数据类型。那么现在,我们知道结构体其实也属于一个数据类型。那我们能否直接打印呢?
答案是不能。其实愿意很简单,我们在输出一个整型数据的时候,我们会先打印一个占位符%d
。可是系统并不知道我们所定义的结构体应该输入哪种占位符。所以我们应该详细地去打印结构体内的具体属性。而这些属性的访问所用的语法就是我们刚才定义时的总分思想和语法。
总结
今天我们学习了结构体的知识,比如:结构体的定义、语法和使用,希望对大家有所帮助。
古今之成大事业、大学问者, 必经过三种之境界。 “昨夜西风凋碧树,独上高楼,望尽天涯路”,此第一境也; “衣带渐宽终不悔,为伊消得人憔悴”,此第二境也; “众里寻他千百度,暮然回首,那人却在,灯火阑珊处”,此第三境也。