C语言 结构体struct简介(一)

零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门

零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C++ 面向对象

零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C++ 设计模式

零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C++ STL

零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C/C++ 技术杂谈

零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C/C++ 常用函数


一.结构体struct前言

  1. C语言 结构体struct简介(一)
  2. C语言 结构体struct定义和使用(二)
  3. C语言 结构体struct数组(三)
  4. C语言 结构体struct指针(四)
  5. C语言 结构体struct成员函数(五)
  6. C语言 结构体struct嵌套(六)
  7. C语言 结构体struct值传递和址传递(七)

二.结构体struct简介

1.结构体使用场景

c 语言结构体类似 c++ 中的类,有点面向对象的味道!在实际开发过程中,一组数据往往有很多种不同的数据类型。

例如,登记学生的信息,可能需要用到 char 表示姓名,int 表示学号,int 表示年龄,bool 表示性别,float 表示成绩。

例如,对于记录一本书,需要 char型的书名,char型的作者名,float型的价格

结构体 struct ,则可以有效的解决这个问题。


结构体本质上还是一种数据类型,但它可以包括若干个“成员”,每个成员的类型可以相同也可以不同,也可以是基本数据类型或者又是一个构造类型。


结构体的优点:结构体不仅可以记录不同类型的数据,而且使得数据结构是“高内聚,低耦合”的,更利于程序的阅读理解和移植,而且结构体的存储方式可以提高CPU对内存的访问速度。


2.结构体声明

结构体声明(也见有称做定义一个结构体)是描述结构如何组合的主要方法。一般形式是:

struct 结构体名
{
数据类型   成员名1;
数据类型   成员名2;
:
数据类型   成员名n;
};

struct 关键词 表示接下来是一个结构体;如声明一个学生的结构:

struct Student{         //声明结构体
    char name[20];      //姓名
    int num;            //学号
    float score;        //成绩
};

3.定义结构变量

结构体变量的定义可以放在结构体的声明之后,例如:

struct Student{         //声明结构体
    char name[20];      //姓名
    int num;            //学号
    float score;        //成绩
};
struct Student stu1;    //定义结构体变量

4.访问结构变量

/******************************************************************************************/
//@Author:猿说编程
//@Blog(个人博客地址): www.codersrc.com
//@File:C语言 结构体struct简介(一)
//@Time:2021/11/04 08:00
//@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
/******************************************************************************************/

#include <stdio.h>

struct Student{         //声明结构体
    char name[20];      //姓名
    int num;            //学号
    float score;        //成绩
};
	
int main () {
	//定义一个结构体并初始化
	struct Student stu2 = (struct Student){"Tom", 15, 88.0};
	printf("姓名:%s\n",stu2.name);
	printf("学号:%d\n",stu2.num);
	printf("成绩:%f\n",stu2.score);
	return 0;
}
/*
姓名:Tom
学号:15
成绩:88.000000

*/

5.修改结构体变量

/******************************************************************************************/
//@Author:猿说编程
//@Blog(个人博客地址): www.codersrc.com
//@File:C语言 结构体struct简介(一)
//@Time:2021/11/04 08:00
//@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
/******************************************************************************************/

#include <stdio.h>

struct Student{         //声明结构体
    char name[20];      //姓名
    int num;            //学号
    float score;        //成绩
};
	
int main () {
	//定义一个结构体并初始化
	struct Student stu2 = (struct Student){"Tom", 15, 88.0};
	printf("姓名:%s\n",stu2.name);
	printf("学号:%d\n",stu2.num);
	printf("成绩:%f\n",stu2.score);
	printf("-----------------------\n");
	//修改学号
	stu2.num = 100;
	//修改成绩
	stu2.score = 99;
	printf("姓名:%s\n",stu2.name);
	printf("学号:%d\n",stu2.num);
	printf("成绩:%f\n",stu2.score);
	return 0;
}
/*
姓名:Tom
学号:15
成绩:88.000000
-----------------------
姓名:Tom
学号:100
成绩:99.000000
*/

三.struct与共用体union区别

结构体和共用体的区别在于:结构体的各个成员会占用不同的内存,互相之间没有影响;而共用体的所有成员占用同一段内存,修改一个成员会影响其余所有成员。

结构体占用的内存大于等于所有成员占用的内存的总和(成员之间可能会存在缝隙),共用体占用的内存等于最长的成员占用的内存。共用体使用了内存覆盖技术,同一时刻只能保存一个成员的值,如果对新的成员赋值,就会把原来成员的值覆盖掉。


四.猜你喜欢

  1. C语言 数组下标越界和内存溢出区别
  2. C语言 使用指针遍历数组
  3. C语言 指针和数组区别
  4. C语言 指针数组和数组指针区别
  5. C语言 野指针
  6. C语言 函数值传递和址传递
  7. C语言 函数不定长参数
  8. C语言 函数指针
  9. C语言 指针函数
  10. C语言 回调函数 callback
  11. C语言 #pragma once
  12. C语言 #include <> 与 #include “” 区别
  13. C语言 const 修饰函数参数
  14. C语言 const 和 define 区别
  15. C语言 #运算符
  16. C语言 ##运算符
  17. C语言 __VA_ARGS__
  18. C语言 ##__VA_ARGS__
  19. C语言 函数不定长参数 ##__VA_ARGS__经典案例
  20. C语言 va_start / va_end / va_arg 自定义 printf 函数
  21. C语言 main 函数参数 main(int argc, char *argv[])
  22. C语言 全局变量和局部变量区别
  23. C语言 static
  24. C语言 extern
  25. C/C++ Unicode 和多字节区别
  26. C/C++ wprintf 输出中文乱码
  27. C/C++ char 和 wchar_t 相互转换
  28. C/C++ NaN(Not a Number)
  29. C语言 枚举enum简介(一)
  30. C语言 枚举enum声明变量和使用(二)
  31. C语言 共用体union
  32. C语言 结构体struct简介(一)

未经允许不得转载:猿说编程 » C语言 结构体struct简介(一)
喜欢(0) 打赏

评论抢沙发

评论前必须登录!

不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!!

开始学习

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏