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

本文是C语言学习笔记,主要讲解结构体的基础知识,包括结构体的定义、成员访问、初始化、结构体数组和指针的使用。通过实例解析,帮助初学者理解结构体在组织复杂数据时的作用及其操作方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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


前言

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;

     /*
      这时候可以用3种方式访问结构体的成员
      */
     // 方式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.结构体与函数之间的关系(未完待更)


总结

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

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

何不忆江南

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值