C语言学习—结构体的定义与使用
文章目录
- 前言
- 一、结构体的概念
- 1.结构体是什么?
- 2.如何定义一个结构体?
- 3.结构体变量
- 4.结构体变量的初始化
- 4.1结构体成员的访问
- 4.2结构体变量的初始化
- 二、结构体的使用
- 1.如何去使用结构体?
- 1.1结构体的普通变量如如何访问结构体成员
- 1.2结构体的指针变量如何访问其成员
- 2.结构体数组
- 总结
前言
在C语言中,结构体类型属于一种构造类型(其他的构造类型还有:数组类型,联合类型)。本文主要介绍关于结构体以下几部分。
一、结构体的概念
1.结构体是什么?
在实际的应用中,往往变量的类型复杂多变,我们仅仅使用C语言内置的类型无法准确的去定义变量,所以引出了结构体这个概念。也就是说,为了描述复杂类型的个体,只用C语言基础的内置类型不能完整的表述,而结构体就可以很好的解决这个问题。
结构体本质上还是一种数据类型,但它可以包括若干个“成员”,每个成员的类型可以相同也可以不同,也可以是基本数据类型或者又是一个构造类型。
2.如何定义一个结构体?
如何定义一个结构体,一般定义的形式如下所示:
//结构体的定义
struct + 结构体名称
{成员列表;
};
【注】在定义结构体的时候,大括号最后一定不要忘记分号:’;'
我们举个简单的例子:我们定义一个名为Student的结构体,该结构体的成员包括:姓名,学号,性别,年龄,总成绩等。
//struct是一个
struct Student //定义一个名为Student的结构体
{char name[20]; //姓名int id; //学号char sex; //性别(1:男 0:女)int age; //年龄int score; //总成绩
};
结构体是一种集合,它里面包含了多个变量或数组,它们的类型可以相同,也可以不同,每个这样的变量或数组都称为结构体的成员。在上面的例子中,Student为结构体名,它包含了5个成员,分别是:name,id,sex,age,score。特别注意,结构体成员的定义方式与变量和数组的定义方式相同,只是不能初始化。
3.结构体变量
既然结构体是一种数据类型,那它就像C语言基础的内置类型一样,可以去定义变量,下面就举个简单的例子:
(1)结构体变量的定义可以放在结构体的声明之后:
struct Student //定义一个名为Student的结构体
{char name[20]; //姓名int id; //学号char sex; //性别(1:男 0:女)int age; //年龄int score; //总成绩
};
struct Student stu; //定义一个结构体变量
(2)结构体变量的定义也可以在结构体声明的同时定义,这样就简化了代码:
struct Student //定义一个名为Student的结构体
{char name[20]; //姓名int id; //学号char sex; //性别(1:男 0:女)int age; //年龄int score; //总成绩
}stu; //在结构体声明的同时定义一个结构体变量stu
在实际的定义中,往往使用第二种方法
struct Student stu1; //C语言中,利用结构体去定义变量的时候,必须加上struct,不能省略
Student stu2; //C++中,利用结构体去定义变量的时候,可以省略struct,可直接使用结构体名去定义
(3)还可以使用匿名结构体来定义结构体变量
struct //没有结构体名
{char name[20]; //姓名int id; //学号char sex; //性别(1:男 0:女)int age; //年龄int score; //总成绩
}stu; //使用匿名结构体来定义一个结构体变量stu
但要注意的是这样的方式虽然简单,但不能再次定义新的结构体变量了,也就是说,这种定义方式只能定义一次,不能重新再去定义别的变量。在使用的时候,要尤其注意。
4.结构体变量的初始化
4.1结构体成员的访问
虽然结构类似一个数组,只是数组元素的数据类型是相同的,而结构中元素的数据类型是可以不同的。但结构不能像数组那样使用下标去访问其中的各个元素,而应该用结构成员运算符点(.)。即访问成员的一般形式是:
结构体变量名.成员名
举个简单的例子:
struct Student stu; //定义一个结构体变量stu
stu.name; //通过stu.去访问结构体中的成员name,表示学生stu的姓名name
stu.age; //通过stu.去访问结构体中的成员age,表示学生stu的年龄age
我们可以通过运算符(.)去访问结构体成员,例如:
当我们使用结构体变量去访问成员的时候,输入运算符.其后面就会出现结构体成员列表,我们选择要访问的成员即可。这也说明我们定义的结构体变量是正确的。
4.2结构体变量的初始化
接上面结构体Student的例子,这里我们对其结构体变量stu1初始化:
struct Student stu1 = { “张飞”, 001, 1, 20, 400 }; //姓名:张飞,学号:001,性别:男(1表示男,0表示女),年龄:20,总成绩:400
struct Student stu1; //若不给结构体初始值,则里面的值均为【随机值】
struct Student stu2 = { "Feizhang" }; //若给结构体只赋值一部分,则后面的全部赋为0
struct Student* stup = &stu1; //定义一个结构体类型的指针stup,指向stu1
struct Student* stuq; //理论上stuq为随机值,但在这里指向0Xcccccccc(Debug模式下会优化为cccccccc)
struct Student Stu_arr[10]; //定义一个结构体数组,若不给初始值,则为随机值
二、结构体的使用
1.如何去使用结构体?
1.1结构体的普通变量如如何访问结构体成员
结构体普通变量如何访问其成员:C语言规定,结构体的普通成员可以通过运算符“点.”去访问其成员,例如:
struct Student stu1 = { "Bulv", 20, 1001, 1, 90 }; //定义结构体变量stu1并初始化
struct Student stu2 = { "Feizhang", 22, 1002, 1, 95 }; //定义结构体变量stu2并初始化
stu1.id = 1003; //通过结构体变量stu1去访问成员id,并将其值修改为1003
printf("%s\n", stu1.name); //打印学生stu1的姓名
printf("%d\n", stu1.age); //打印学生stu1的年龄
strcpy_s(stu1.name, 10, "caopi"); //修改stu1的第一个变量name的值(char类型不能直接赋值)
1.2结构体的指针变量如何访问其成员
结构体的指针变量如何访问其成员:可以通过箭头符号的方式去访问其成员:
(*p).name == p -> name //左右两种访问方式等价
举个简单的例子:
struct Student stu = { "刘备", 20, 1001, 1, 90 }; //定义结构体变量stu1并初始化
struct Student *p = &stu; //定义一个结构体指针p去指向结构体变量stu
(*p).age = 23; //等价于p -> age = 23; //将年龄修改为23
strcpy_s((*p).name, "张飞");//注意点和星号的优先级
【注】结构体成员如果是字符串,不能直接通过赋值号“=”去修改值,可以通过C语言中的拷贝函数strcpy去修改值。
2.结构体数组
在上面的例子中,我们都只是定义一个结构体变量,但在实际中,结构体变量不止一个,所以就需要一个数组来去存储。对比一般数组的定义,结构体数组也可以用相同的方式去定义、使用。下面举个例子:
struct Student //定义一个名为Student结构体
{char name[20]; //姓名int age; //年龄int id; //学号
}stu[5]; //定义一个结构体数组stu[5],其长度是5,相当于要记录5个学生的信息
如何去使用结构体数组呢?如何访问结构体数组呢?我们看个简单的例子:
总结
总结:以上是对结构体的定义以及如何使用做了简单的介绍,C语言中,我们实际要求的变量类型不能仅仅只通过C语言基础内置类型来定义,所以就引出了结构体,利用结构体来定义我们的变量,可以满足我们的要求,但是要注意的几点就是:
1.结构体如何定义,在定义的时候可以同时定义一个结构体变量,末尾必须以分好结尾;
2.结构体变量如何去访问其成员,可以通过运算符"."去访问;结构体指针变量如何去访问成员,可以通过箭头的形式去访问,例如:(*p).name == p -> name //左右两种访问方式等价。
C语言学习—结构体的定义与使用相关推荐
- 用JAVA定义两个结构体_c语言struct结构体的定义和使用
c语言由于不像java,c#,c++等语言有对象,所以就用struct结构体来表示,其实作用是差不多的,下面来快速学习c语言struct结构体的定义和使用,以学生类student来举例,有三种定义方式 ...
- c语言中申请内存并初始化,c语言中结构体的定义、初始化及内存分配
#include struct person { char *name; int age; }; int main() { //结构体可以定义在函数内,也可以定义到函数外 //相当于全局变量与局部变量 ...
- ios开发中的C语言学习—— 结构体简介
在开发过程中,经常会需要处理一组不同类型的数据,比如学生的个人信息,由姓名.年龄.性别.身高等组成,因为这些数据是由不同数据类型组成的,因此不能用数组表示,对于不同数据类型的一组数据,可以采用结构体来 ...
- c语言中结构体类型定义的函数指针,结构体中定义函数指针
结构体指针变量的定义 定义结构体变量的一般形式如下:形式1:先定义结构体类型,再定义变量struct 结构体标识符{ 成员变量列表;-};struct 结构体标识符 *指针变量名;变量初始化:stru ...
- C语言 malloc() + 结构体指针定义结构体变量
之前在学习链表的过程中,笔者认为新节点必须如下定义: struct Node *p; struct Node {int val;p pNext; };int main() {Node Node1;No ...
- 2020.1.13 C语言学习 结构体+结构体数组+结构体指针
结构体 结构体的形式 struct 结构体名称 { 结构体成员1; 结构体成员2; - }; 例如: 图书的结构体 struct Book {char title[128];char author[4 ...
- 解答:C语言中结构体的定义中,后面跟的“结构体变量”到底是什么?
这个问题我在网上没看到很清楚的回答,w3cschool里也没讲清楚,所以就整理了一下自己的理解,回答了一个百度知道的提问.贴上链接:https://zhidao.baidu.com/question/ ...
- 【C语言】结构体变量定义、初始化、使用
目录 前言 一.声明"结构体类型" 二.定义结构体变量 方法 1 先声明结构体类型,再定义结构体变量 方法 2 声明类型的同时定义变量 *方法 3 不指定结构体名(结构体标记), ...
- c语言定义学生结构体类型,C语言中结构体的三种定义方式
c语言中结构体的定义: struct 结构体名{ 成员列表: ..... }结构体变量: 7.1.1 结构体类型变量的定义 结构体类型变量的定义与其它类型的变量的定义是一样的,但由于结构体类型需要针对 ...
最新文章
- pickle,json ;random,shelve
- windows API 开发飞机订票系统 图形化界面 (一)
- 分析PCB技术印制电路板的可靠性设计(z)
- 一行代码揭开CPU执行原理
- textarea的光标自动居左的问题
- pymysql使用变化的变量,构造SQL语句
- 1inch将升级至1.1版本并开启新的流动性挖矿计划
- IE、firefox下怎样获得自定义属性的值
- 表-创建表-表的转换函数
- 系统学习机器学习之随机场(五)--CRF++源码L-BFGS算法补充
- 思科无线认证服务器,无线局域网控制器(WLC)上管理用户的RADIUS服务器身份验证配置示例...
- iPhone 14 系列维修价曝光,修不起!
- PAC(期间平均成本)
- 将SSH多次登录失败的IP加入黑名单
- SEO之搜索引擎劫持
- ApowerMirror PJ教程
- C - 一只小蜜蜂...
- 与痘痘达成和平共处五项原则
- C51 以PWM实现呼吸灯
- XueTr查找到未知内核模块如何定位这个模块的位置