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

【学习笔记】浅浅复习一下C语言结构体

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

【学习笔记】浅浅复习一下C语言结构体

提示:本文仅供C语言初学者参考使用,文章代码部分来源网络,如有侵权,请尽快私信删除!

文章目录
  • 前言
  • 一、结构体是什么?
  • 二、使用结构体
    • 1.定义结构体
    • 那个Student叫结构体类型名(答应我读三遍)
    • 2.对结构体成员进行访问
    • 3.结构体变量的初始化
    • 4.结构体数组
    • 5.结构体指针
    • 6.结构体的内存分析(未完待更)
    • 7.结构体与函数之间的关系(未完待更)
  • 总结


前言

C语言中的结构体是很多小白很头痛的地方(包括博主)本文主要从一名初学者的角度(也就是博主)出发学习【结构体】的相关知识!


一、结构体是什么?

结构体是一种构造类型,和数组差不多(不准确,但都属于构造类型)。
但两者的区别是数组中存储的都是相同类型的,例如整型数组,字符型数组,指针数组等等。他中间存放的都是一个类型的数据。
而结构体中存放的是不同类型的数据!!(有没有被震惊到!C语言果然是最强大的语言.Java邏)

举一个小小的例子帮助读者理解一下子:
咳咳(打起精神)
现在要做一个班级成员信息系统,主要包括学生的各类信息(年龄,性别,学号,出生年月…),很明显在C语言中,要用组的思想的解决,可是如果用数组的话,这些信息中年龄肯定用整型变量,性别用字符型,学号用…不同的数据类型很难搞啊(作为一名C语言小白,此时我已经脑瓜子嗡嗡的了)!但是C语言的开发者已经想到了,搞了一个叫结构体的东西,“结构”(structure),或者叫结构体。

二、使用结构体 1.定义结构体

代码如下(示例):
定义一个结构体类型的一般形式⬇

struct 结构体名{
     类型名1 成员名1;
     类型名2 成员名2;
     ……
     类型名n 成员名n;
 };

应用实例如⬇

 struct Student {
    char *name; // 姓名
    int age; // 年龄
    float height; // 身高
};
那个Student叫结构体类型名(答应我读三遍)

下面我们定义一个结构体变量stu

struct Student {
     char *name;
     int age;
 };
 struct Student stu;            //形式1
struct Student {
     char *name;
     int age;
 }stu;                         //形式2

这两段代码中的stu叫做结构体变量名!!(不要跟结构体类型名弄混了)
类比数组,前者student相当于数组类型,而stu相当于数组名!

2.对结构体成员进行访问

访问的形式为:结构体变量名.成员名
上代码!

struct Student {
     char *name;
     int age;
 };
 struct Student stu;
 // 访问stu的age成员
 stu.age = 27;
 printf("age = %d", stu.age);

像数组一样,直接用就好辣,很简单有没有!

3.结构体变量的初始化

结构体变量的初始化有很多种,可以定义时顺序初始化,定义时不按顺序初始化,也可以先定义后逐个初始化,先定义后一次性初始化,推荐使用后两种,为啥?方便!

struct Student {
     char *name;
     int age;
 };
 struct Student stu;
stu.name = "lnj";
stu.age = 35;//先定义后逐个初始化!
struct Student {
     char *name;
     int age;
 };
struct Student stu;
stu = (struct Student){"lnj", 35};//先定义后一次性初始化!
4.结构体数组

结构体你已经懂了,数组你也懂了(默认),那现在进阶一下子,有一个叫结构体数组的东西!
其实很简单,开头讲了,数组中的数据类型都一样,那结构体数组是啥?就是数组里的数据都是结构体类型嘛!so easy!(你又懂了【doge】)

struct Student {
    char *name;
    int age;
};
struct Student stu[2]; 
stu[0] = {"lnj", 35};
stu[1] = {"zs", 18};

这用法简直跟数组一一样!先定义一个结构体类型,相当于你定义了一个数组类型,然后初始化…

5.结构体指针

不要看到指针就给我逃跑啊喂!!!给我回来!
结构体指针说白了也就是个指针嘛,只不过指针指向的类型变成了结构体。准确点讲是一个指针指向了结构体类型的数据。
前面学过,使用指针指向不同的数据类型的时候,要规定指针的数据类型。什么意思?我举个例子:指向整型变量时你定义了*int p,字符型char *p…同理,定义结构体类型的呢?自然是

struct 结构体类型名 *p

简单吧?
下面举个例子:

      // 定义一个结构体类型
      struct Student {
          char *name;
          int age;
      };

     // 定义一个结构体变量
     struct Student stu = {“lnj", 18};

     // 定义一个指向结构体的指针变量
     struct Student *p;

    // 指向结构体变量stu
    p = &stu;

     
     // 方式1:结构体变量名.成员名
     printf("name=%s, age = %d n", stu.name, stu.age);

     // 方式2:(*指针变量名).成员名
     printf("name=%s, age = %d n", (*p).name, (*p).age);

     // 方式3:指针变量名->成员名
     printf("name=%s, age = %d n", p->name, p->age);

     return 0;
 }

通过结构体指针访问结构体成员的时候,可以通过两种方式(敲黑板!)
1.{结构体指针变量}.变量名
2.结构体指针变量->成员名

现在用的多的都是第二种,因此要用熟!
特别地,第一种的那个括号不要省掉(成员符“.”的优先级高于“*”),比如某些同学的c语言期末考试是手写代码,掉一个括号很不容易发现。

6.结构体的内存分析(未完待更) 7.结构体与函数之间的关系(未完待更)
总结

结构体这东西,对初学者来说说难不难,说简单也不简单,它运用的基本知识都是之前学过的,用的思想也是之前的,总体来说没有什么新的知识。但是一定要去敲代码,学到了结构体,写的代码篇幅就会比大很多。但是有了结构体,代码也会变得更加清晰,数据的结构感更强。

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

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

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