C语言-结构体

简介: 结构体的定义看了很多资料,都说结构的定义有多种方式,分的多了反而觉得乱,所以我个人觉得只要分两种就可以了:一种是 不带typedef 的定义方式一种是 带typedef 的定义方式不带typedef 的定义方式定义一个学生结构体s...

结构体的定义

看了很多资料,都说结构的定义有多种方式,分的多了反而觉得乱,所以我个人觉得只要分两种就可以了:

  1. 一种是 不带typedef 的定义方式
  2. 一种是 带typedef 的定义方式

不带typedef 的定义方式

定义一个学生结构体

struct student{
    char no[20];       //学号
    char name[20];    //姓名
    char sex[5];    //性别
    int age;          //年龄
};
//定义结构体变量
struct student stu1,stu2;

注意:

  • 在定义结构体后面的分号不能少
  • 单独定义结构体变量时,关键字struct也要一起写,不过在C++中可以省略。

当然,也可以在定义结构体的时候直接定义结构体变量,以上的定义方式也可以写成以下方式

struct student{
    char no[20];       //学号
    char name[20];    //姓名
    char sex[5];    //性别
    int age;          //年龄
}stu1,stu2;

这种定义方式很简便,但是容易跟带typedef的定义方式搞混,注意这个结构体变量的位置,下面就来详细说明

带typedef的定义方式

因为第一种定义方式在单独定义结构体变量时需要带上关键字struct,人们觉得比较麻烦,所以就有了这样的一种定义方式。

用带typedef的定义方式重新定义上面的结构体

typedef struct{    //这时student结构体名可以不写
    char no[20];       //学号
    char name[20];    //姓名
    char sex[5];    //性别
    int age;          //年龄
}student;
//单独定义结构体变量
student stu1,stu2;

这里有几个区别以及注意点:

  1. 加上typedef后,struct后的结构体变量名可以省略不写
  2. 结构体大括号后的字符串是结构体的别名(比如上面的 student ),而不是结构体的变量
  3. 在单独定义的变量的时候,struct 可以省略

结构体成员的引用

结构体成员的引用也有两种方式,主要是以结构体变量的类型来决定的。

  1. 如果是一般的结构变量,那么可以通过“.”进行引用
  2. 如果结构变量是一个指针,那么必须通过“->”方式引用

如下所示:

一般结构变量引用结构体成员方式

student stu1;
//引用方式
stu1.no;
stu1.name;
stu1.sex;
stu1.age;

指针型结构体变量引用结构体成员方式

student* stu1;
//引用方式
stu1->no;
stu1->name;
stu1->sex;
stu1->age;

总结:

  1. 结构体是自定义的一种数据类型
  2. 结构体不能进行加减乘除,但是可以相互赋值
目录
相关文章
|
15天前
|
C语言
C语言结构体内存对齐
C语言结构体内存对齐
C4.
|
1月前
|
存储 数据管理 C语言
C语言的结构体数组
C语言的结构体数组
C4.
22 0
C4.
|
1月前
|
搜索推荐 C语言
C语言的结构体变量
C语言的结构体变量
C4.
10 0
|
1月前
|
编译器 Linux C语言
c语言结构体知识系统详解
c语言结构体知识系统详解
49 0
|
18天前
|
存储 编译器 Linux
【C语言】自定义类型:结构体深入解析(二)结构体内存对齐&&宏offsetof计算偏移量&&结构体传参
【C语言】自定义类型:结构体深入解析(二)结构体内存对齐&&宏offsetof计算偏移量&&结构体传参
|
15天前
|
存储 C语言
C语言自定义类型结构体详解
在C语言中,结构体是复合数据类型,能组合不同类型的数据显示。定义结构体用`struct`关键字,如`struct Student {char name[20]; int age; float score;};`。声明结构体变量如`struct Student stu1;`,访问成员用`.`操作符,如`stu1.age = 20;`。初始化可直接赋值`struct Student stu1 = {"李四", 22, 85.5};`。结构体数组如`struct Student stuArray[3]`,结构体指针如`struct Student *pStu = &stu1;`。
5 0
|
18天前
|
存储 搜索推荐 编译器
【C语言】一篇文章深入解析联合体和枚举且和结构体的区别
【C语言】一篇文章深入解析联合体和枚举且和结构体的区别
|
18天前
|
存储 网络协议 编译器
【C语言】自定义类型:结构体深入解析(三)结构体实现位段最终篇
【C语言】自定义类型:结构体深入解析(三)结构体实现位段最终篇
|
26天前
|
存储 编译器 C语言
【C语言】结构体的大小是如何计算的?(结构体对齐)
【C语言】结构体的大小是如何计算的?(结构体对齐)
26 0