文章目录

  • 前言
  • 一、结构体的概念
    • 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语言学习—结构体的定义与使用相关推荐

  1. 用JAVA定义两个结构体_c语言struct结构体的定义和使用

    c语言由于不像java,c#,c++等语言有对象,所以就用struct结构体来表示,其实作用是差不多的,下面来快速学习c语言struct结构体的定义和使用,以学生类student来举例,有三种定义方式 ...

  2. c语言中申请内存并初始化,c语言中结构体的定义、初始化及内存分配

    #include struct person { char *name; int age; }; int main() { //结构体可以定义在函数内,也可以定义到函数外 //相当于全局变量与局部变量 ...

  3. ios开发中的C语言学习—— 结构体简介

    在开发过程中,经常会需要处理一组不同类型的数据,比如学生的个人信息,由姓名.年龄.性别.身高等组成,因为这些数据是由不同数据类型组成的,因此不能用数组表示,对于不同数据类型的一组数据,可以采用结构体来 ...

  4. c语言中结构体类型定义的函数指针,结构体中定义函数指针

    结构体指针变量的定义 定义结构体变量的一般形式如下:形式1:先定义结构体类型,再定义变量struct 结构体标识符{ 成员变量列表;-};struct 结构体标识符 *指针变量名;变量初始化:stru ...

  5. C语言 malloc() + 结构体指针定义结构体变量

    之前在学习链表的过程中,笔者认为新节点必须如下定义: struct Node *p; struct Node {int val;p pNext; };int main() {Node Node1;No ...

  6. 2020.1.13 C语言学习 结构体+结构体数组+结构体指针

    结构体 结构体的形式 struct 结构体名称 { 结构体成员1; 结构体成员2; - }; 例如: 图书的结构体 struct Book {char title[128];char author[4 ...

  7. 解答:C语言中结构体的定义中,后面跟的“结构体变量”到底是什么?

    这个问题我在网上没看到很清楚的回答,w3cschool里也没讲清楚,所以就整理了一下自己的理解,回答了一个百度知道的提问.贴上链接:https://zhidao.baidu.com/question/ ...

  8. 【C语言】结构体变量定义、初始化、使用

    目录 前言 一.声明"结构体类型" 二.定义结构体变量 方法 1  先声明结构体类型,再定义结构体变量 方法 2 声明类型的同时定义变量 *方法 3 不指定结构体名(结构体标记), ...

  9. c语言定义学生结构体类型,C语言中结构体的三种定义方式

    c语言中结构体的定义: struct 结构体名{ 成员列表: ..... }结构体变量: 7.1.1 结构体类型变量的定义 结构体类型变量的定义与其它类型的变量的定义是一样的,但由于结构体类型需要针对 ...

最新文章

  1. pickle,json ;random,shelve
  2. windows API 开发飞机订票系统 图形化界面 (一)
  3. 分析PCB技术印制电路板的可靠性设计(z)
  4. 一行代码揭开CPU执行原理
  5. textarea的光标自动居左的问题
  6. pymysql使用变化的变量,构造SQL语句
  7. 1inch将升级至1.1版本并开启新的流动性挖矿计划
  8. IE、firefox下怎样获得自定义属性的值
  9. 表-创建表-表的转换函数
  10. 系统学习机器学习之随机场(五)--CRF++源码L-BFGS算法补充
  11. 思科无线认证服务器,无线局域网控制器(WLC)上管理用户的RADIUS服务器身份验证配置示例...
  12. iPhone 14 系列维修价曝光,修不起!
  13. PAC(期间平均成本)
  14. 将SSH多次登录失败的IP加入黑名单
  15. SEO之搜索引擎劫持
  16. ApowerMirror PJ教程
  17. C - 一只小蜜蜂...
  18. 与痘痘达成和平共处五项原则
  19. C51 以PWM实现呼吸灯
  20. XueTr查找到未知内核模块如何定位这个模块的位置

热门文章

  1. 视频转文字怎么弄?建议收藏这些方法
  2. sql语句查询到上周、上个月的数据
  3. 远程桌面登录,锁定与解锁
  4. STM32学习笔记---GPIO
  5. 使用WinPE安装Windows 7——思齐博客
  6. 物联网技术与应用【第五章测验答案】
  7. 如何手动下载最新的 macOS Beta 完整镜像?
  8. 电子信息工程水声考研去向_水声工程专业考研专业介绍及就业解析
  9. Python实现替换照片人物背景,精细到头发丝 | 机器学习
  10. 2022-2028全球与中国修枝剪刀片市场现状及未来发展趋势