c语言struct用法详解

c语言struct用法详解

c语言struct用法详解

在C语言中,可以使用结构体(Struct)来存放一组不同类型的数据。结构体的定义形式为:

struct 结构体名{    结构体所包含的变量或数组};

结构体是一种集合,它里面包含了多个变量或数组,它们的类型可以相同,也可以不同,每个这样的变量或数组都称为结构体的成员(Member)。

推荐《c语言教程》

请看下面的一个例子:

立即学习“C语言免费学习笔记(深入)”;

struct stu{    char *name;  //姓名    int num;  //学号    int age;  //年龄    char group;  //所在学习小组    float score;  //成绩};

stu 为结构体名,它包含了 5 个成员,分别是 name、num、age、group、score。结构体成员的定义方式与变量和数组的定义方式相同,只是不能初始化。

注意大括号后面的分号;不能少,这是一条完整的语句。

结构体也是一种数据类型,它由程序员自己定义,可以包含多个其他类型的数据。

像 int、float、char 等是由C语言本身提供的数据类型,不能再进行分拆,我们称之为基本数据类型;而结构体可以包含多个基本类型的数据,也可以包含其他的结构体,我们将它称为复杂数据类型或构造数据类型。

结构体变量

既然结构体是一种数据类型,那么就可以用它来定义变量。例如:

struct stu stu1, stu2;

定义了两个变量 stu1 和 stu2,它们都是 stu 类型,都由 5 个成员组成。注意关键字struct不能少。

stu 就像一个“模板”,定义出来的变量都具有相同的性质。也可以将结构体比作“图纸”,将结构体变量比作“零件”,根据同一张图纸生产出来的零件的特性都是一样的。

你也可以在定义结构体的同时定义结构体变量:

struct stu{

    char *name;  //姓名

    int num;  //学号

    int age;  //年龄

    char group;  //所在学习小组

    float score;  //成绩

} stu1, stu2;

将变量放在结构体定义的最后即可。

如果只需要 stu1、stu2 两个变量,后面不需要再使用结构体名定义其他变量,那么在定义时也可以不给出结构体名,如下所示:

struct{  //没有写 stu

    char *name;  //姓名

    int num;  //学号

    int age;  //年龄

    char group;  //所在学习小组

    float score;  //成绩

} stu1, stu2;

这样做书写简单,但是因为没有结构体名,后面就没法用该结构体定义新的变量。

理论上讲结构体的各个成员在内存中是连续存储的,和数组非常类似,例如上面的结构体变量 stu1、stu2 的内存分布如下图所示,共占用 4+4+4+1+4 = 17 个字节。

但是在编译器的具体实现中,各个成员之间可能会存在缝隙,对于 stu1、stu2,成员变量 group 和 score 之间就存在 3 个字节的空白填充(见下图)。这样算来,stu1、stu2 其实占用了 17 + 3 = 20 个字节。

关于成员变量之间存在“裂缝”的原因,我们将在《C语言内存精讲》专题中的《C语言内存对齐,提高寻址效率》一节中详细讲解。

成员的获取和赋值

结构体和数组类似,也是一组数据的集合,整体使用没有太大的意义。数组使用下标[ ]获取单个元素,结构体使用点号.获取单个成员。获取结构体成员的一般格式为:

结构体变量名.成员名;

通过这种方式可以获取成员的值,也可以给成员赋值:

#include int main(){    struct{        char *name;  //姓名        int num;  //学号        int age;  //年龄        char group;  //所在小组        float score;  //成绩    } stu1;    //给结构体成员赋值    stu1.name = "Tom";    stu1.num = 12;    stu1.age = 18;    stu1.group = 'A';    stu1.score = 136.5;    //读取结构体成员的值    printf("%s的学号是%d,年龄是%d,在%c组,今年的成绩是%.1f!n", stu1.name, stu1.num, stu1.age, stu1.group, stu1.score);    return 0;}

运行结果:

Tom的学号是12,年龄是18,在A组,今年的成绩是136.5!

除了可以对成员进行逐一赋值,也可以在定义时整体赋值,例如:

struct{    char *name;  //姓名    int num;  //学号    int age;  //年龄    char group;  //所在小组    float score;  //成绩} stu1, stu2 = { "Tom", 12, 18, 'A', 136.5 };

不过整体赋值仅限于定义结构体变量的时候,在使用过程中只能对成员逐一赋值,这和数组的赋值非常类似。

需要注意的是,结构体是一种自定义的数据类型,是创建变量的模板,不占用内存空间;结构体变量才包含了实实在在的数据,需要内存空间来存储。

更多编程相关内容,请关注创想鸟编程入门栏目!

以上就是c语言struct用法详解的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1433678.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月17日 09:18:41
下一篇 2025年12月16日 15:57:10

相关推荐

  • c语言运算符的优先级

    一个表达式可以包含多个运算符。在这种情况下,运算符的优先级决定表达式的哪部分被处理为每个运算符的操作数。 推荐:《c语言教程》 如果一个表达式中的两个操作数具有相同的优先级,那么它们的结合律(associativity)决定它们的组合方式是从左到右或是从右到左。 所有 C 语言运算符的优先级和结合律…

    2025年12月17日
    000
  • c语言中预处理命令都必须以什么号开始

    程序设计语言的预处理的概念:在编译之前进行的处理。 C语言的预处理主要有三个方面的内容: 1.宏定义; 2.文件包含; 3.条件编译。 预处理命令以符号“#”开头。 推荐:《c语言教程》 编译预处理命令的特点有: ①为了区分一般的语句,预处理命令行都必须以#开始,结尾不加分号; 立即学习“C语言免费…

    2025年12月17日
    000
  • 在c语言中的float是什么意思?

    float是C语言的基本数据类型中的一种,表示单精度浮点数。 推荐:《c语言教程》 C语言规定单精度浮点型在内存占用4个字节,精度为7位,取值范围为:3.4*10^-38 ~3.4*10^38或者-(3.4*10^-38 ~3.4*10^38) 可以定义单精度浮点型变量,如float a;即定义了一…

    2025年12月17日
    000
  • 求水仙花数c语言代码怎么写

    求水仙花数c语言代码怎么写 水仙花数(Narcissistic number)也被称为超完全数字不变数(pluperfect digital invariant, PPDI)、自恋数、自幂数、阿姆斯壮数或阿姆斯特朗数(Armstrong number),水仙花数是指一个 3 位数,它的每个位上的数字…

    2025年12月17日
    000
  • c语言逻辑运算符的优先级是怎样的

    c语言逻辑运算符的优先级是怎样的 C 语言提供了以下三种逻辑运算符。 ●  一元:!(逻辑非)。  ● 二元:&&(逻辑与)、||(逻辑或)。 推荐:《C语言视频教程》 立即学习“C语言免费学习笔记(深入)”; 以上三种逻辑运算符中,逻辑非 ! 的优先级最高,逻辑与 &&am…

    2025年12月17日
    000
  • c语言规定在一个源程序中main函数的位置是哪里?

    C语言规定在一个源程序中main函数可以在任意位置。C程序总是从main函数开始执行,但main函数在程序中的位置可以是任意的。 推荐:《c语言教程》 main函数,又称主函数,是程序执行的起点,main是相对来说的,如同音学理论之主调于泛音,泛音即程序中的除main之外的其他函数,迎合人们的思考方…

    2025年12月17日
    000
  • xcode怎么编写c语言

    第一次在苹果电脑编写程序的你是不是感觉特别特别新奇,今天为大家简单介绍一下苹果电脑中的xcode编写c语言的方法。 xcode怎么编写c语言     1、点击启动器图标,在弹出的界面中找到Xcode(如果没有请在App Store中安装) 推荐学习:c语言视频教程 立即学习“C语言免费学习笔记(深入…

    2025年12月17日 好文分享
    000
  • c语言中return 0是什么意思?

    c语言中return 0的含义: 推荐:《c语言教程》 1、返回值int 类型的函数返回: return语句用来结束循环,或返回一个函数的值。 立即学习“C语言免费学习笔记(深入)”; return 0:一般用在主函数结束时,按照程序开发的一般惯例,表示成功完成本函数。 2、布尔类型返回: retu…

    2025年12月17日
    000
  • c语言简单心形代码

    c语言简单心形代码     用c语言,制作一个心形图案。送给c语言初学者。 推荐学习:c语言视频教程 代码如下: #include int main() { for (float y = 1.5f; y > -1.5f; y -= 0.1f) { for (float x = -1.5f; x…

    2025年12月17日
    000
  • c语言static关键字的作用是什么

    c语言static关键字的作用是什么 在C中,static主要定义全局静态变量、定义局部静态变量、定义静态函数。 推荐学习:c语言视频教程 在日常使用过程中,static通常有两个作用: 1、修饰变量 立即学习“C语言免费学习笔记(深入)”; ■ 静态全局变量:全局变量前加static修饰,该变量就…

    2025年12月17日
    000
  • c语言如何求n个数的平均值?

    c语言求n个数的平均值: 推荐:《c语言教程》 #includeint main(void){int a[100] = { NULL };//初始化数组元素int i = 0, n;//定义循环变量和正整数变量nfloat sum = 0.0;//定义和变量为float型,注意计算的数据类型floa…

    2025年12月17日
    000
  • c语言源程序经过编译后,生成文件的后缀是什么?

    C语言源文件后缀名是.c,编译生成的文件后缀名是.obj,连接后可执行文件的后缀名是.exe。 推荐:《c语言教程》 编译器将源代码转换为二进制分为以下四步:     预处理、编译、汇编、链接     立即学习“C语言免费学习笔记(深入)”; 预处理:预编译动作,比如宏、static成员等都在这个阶…

    2025年12月17日
    000
  • c语言中=和==的区别是什么?

    c语言中==和=只在意义一个方面有区别,具体如下: “==”是关系运算符,而“=”是赋值运算符。 关系运算符都是双目运算符,其结合性均为左结合。关系运算符的优先级低于算术运算符,高于赋值运算符。 “=”并不等于符号,而是赋值操作符,如 x=3。除此之外,还可以在一个语句中向多个变量赋同一个值,即多重…

    2025年12月17日
    000
  • c语言中不等于怎么表示?

    不等于是C语言中的关系运算符,其符号为!=,由两个字符叹号和等于号组成,中间不能有空格。 使用形式为expr1!= expr2。即当expr1和expr2值不相等时,结果为1(真),否则为0(假)。 推荐:《c语言教程》 c语言中“!=”是一个关系运算符,c语言中的关系运算符有: 立即学习“C语言免…

    2025年12月17日
    000
  • c语言函数返回值类型由什么决定?

    C语言函数返回值的类型是由定义函数时所指定的函数类型决定的。 函数值的类型应当是在定义函数时指定的。在定义函数时对函数值说明的类型一般应该和return语句中的表达式类型―致,如果不―致,则以函数类型为准,即函数类型决定返回值的类型。 示例: int fun(int a){ float a=1.5;…

    2025年12月17日
    000
  • c语言的基本单位是什么?

    C语言程序是由函数构成的,函数是C程序的基本组成单位,一个C语言程序中仅有一个main()函数,除main函数之外可以有若干个其它的函数,每个函数实现某一特定的操作。 推荐:《c语言教程》 函数是一段可以重复使用的代码,用来独立地完成某个功能,它可以接收用户传递的数据,也可以不接收。接收用户数据的函…

    2025年12月17日
    000
  • c语言程序总是从第一个定义的函数开始执行吗?

    c语言中不是从第一个定义的函数开始执行,C语言程序总是从main()函数开始执行。 一个程序,无论复杂或简单,总体上都是一个“函数”;这个函数就称为“main() 函数”,也就是“主函数”。 main函数,又称主函数,是程序执行的起点,main是相对来说的,如同音学理论之主调于泛音,泛音即程序中的除…

    2025年12月17日
    000
  • 如何用c语言实现单词统计

    如何用c语言实现单词统计 输入一串字符串,输出其中有多少个单词。 推荐学习:c语言视频教程 代码如下: #include #include #define SIZE 20int main(){ char str[SIZE]={”}; int count=0; printf(“plz input t…

    2025年12月17日
    000
  • vs2017怎么编写c语言

    vs2017怎么编写c语言? 首先打开VS2017软件,选择新建下面的项目,如下图所示 推荐:《C语言教程》 接着在弹出的界面中Win32控制台程序,如下图所示 立即学习“C语言免费学习笔记(深入)”; 然后勾选空项目类型,如下图所示 C语言程序目录建成以后,右键单击源文件,选择添加新建项 接着选择…

    2025年12月17日 好文分享
    000
  • c语言中break的用法

    C语言中break语句有以下两种用法: 1、当break语句出现在一个循环内时,循环会立即终止,且程序流将继续执行紧接着循环的下一条语句。 2、它可用于终止switch语句中的一个case。 如果使用的是嵌套循环(即一个循环内嵌套另一个循环),break语句会停止执行最内层的循环,然后开始执行该块之…

    2025年12月17日
    000

发表回复

登录后才能评论
关注微信