结构体声明、定义和初始化的几种方式

这篇具有很好参考价值的文章主要介绍了结构体声明、定义和初始化的几种方式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

五种结构体声明方式:

  • 直接声明结构体类型
  • 声明结构体类型的同时定义结构体变量
  • 不指定结构体名而直接定义结构体变量
  • 使用结构体标记和类型别名
  • 直接声明结构体别名

在C语言中,标记(tag)是在定义struct, union或enum关键字之后使用的标识符。之所以称其为结构体的“tag”而不是“name”,是因为在C语言中,仅使用 tnode 不会指向该结构体(标记为tnode的struct),而需要用 struct tnode。

结构体的声明及定义:

// 直接定义结构体类型
struct student{
    char no[20];       //学号
    char name[20];    //姓名
    char sex[5];      //性别
    int age;          //年龄
};
struct student stu3;

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

// 不指定结构体名而直接定义结构体变量
struct{
    char no[20];        //学号
    char name[20];      //姓名
    char sex[5];      //性别
    int age;          //年龄
} stu1,stu2; 
// 直接定义结构体变量stu1、stu2之后,就不能再继续定义该类型的变量

// 使用结构体标记和类型别名
typedef struct student{
    char no[20];       //学号
    char name[20];    //姓名
    char sex[5];      //性别
    int age;          //年龄
}student_t;
student_t stu1,stu2;  //此时stu1,stu2为student结构体变量
struct student stu3;

// 直接定义结构体别名
typedef struct{
    char no[20];       //学号
    char name[20];    //姓名
    char sex[5];      //性别
    int age;          //年龄
}student_t;
student_t stu1,stu2; // 只能使用这种方式

有typedef 和无typedef 关键字的区别在于,第一种方式将结构体标记和类型别名定义在一起,可以更方便地使用别名来代替结构体类型;而第二种方式直接定义结构体类型,不需要定义结构体标记,但需要使用 struct 关键字来引用结构体类型。

无论采用哪种方式,定义的结构体类型本质上都是相同的,它们都有相同的结构体成员,并且可以通过别名来使用结构体类型。

需要注意的是,如果结构体类型没有设置类型别名,则必须在定义变量时使用结构体标记来指定变量的类型,而不能使用类型别名。另外,如果结构体类型定义在函数内部,则只能在函数内部使用该结构体类型。文章来源地址https://www.toymoban.com/news/detail-410040.html

到了这里,关于结构体声明、定义和初始化的几种方式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • QTextDocument的使用方法及几种初始化方式

    qtextDocument并不像控件一样可以通过拖拽方式拉到设计器中使用,也不能直接声明就可以初始化使用,而是需要通过包涵库文件的方式包涵在当前的窗体文件中。 如: 上面说了Qtextdocument并不是控件,它是辅助配合QT中的文本编辑控件进行文本操作的类库。 QTextDocument在使用之

    2024年02月09日
    浏览(34)
  • C语言中结构体初始化并清零的方法有几种?

    结构体初始化清零方法 在C语言中,结构体初始化并清零的方法有以下几种: 手动赋值为0:结构体定义后在函数内手动将每个成员都赋值为0。例如: 使用memset()函数:可以使用  memset()  函数将结构体的所有成员都设置为0。例如: C99标准的方式:C99标准新增了一个特性,可

    2024年02月17日
    浏览(27)
  • C语言结构体的初始化方式

    逐个初始化字段 :这是最直接的方式,你可以逐个为结构体的每个字段进行初始化。 2.使用结构体字面值初始化 :这种方式允许你在初始化时使用一个字面值来为结构体提供初始值 3. 全局初始化 :在全局范围内,你可以在变量声明时就进行初始化。 4. 使用  memset  函数 :

    2024年02月09日
    浏览(36)
  • C语言——结构体类型(一)【结构体定义,创建,初始化和引用】

    📝前言: 在实际编程过程中,我们可能会希望把一些关联的数据存放在一起,这样方便我们使用。但是这些数据的类型有时候并不一致,例如一个学生的信息:有名字(字符串),有年龄(整数),性别(字符)······这时候,我们就可以使用 自定义类型——结构体类型

    2024年02月03日
    浏览(36)
  • 【C++11】:统一的列表初始化|声明|STL变化

    ​                                                 🎬慕斯主页 : 修仙—别有洞天                                               ♈️ 今日夜电波:マイノリティ脈絡—ずっと真夜中でいいのに。                                          

    2024年03月26日
    浏览(34)
  • 【数据结构】顺序栈和链栈的基本操作(定义,初始化, 入栈,出栈,取栈顶元素,遍历,置空)

    🎊专栏【数据结构】 🍔喜欢的诗句:更喜岷山千里雪 三军过后尽开颜。 🎆音乐分享【勋章】 大一同学小吉,欢迎并且感谢大家指出我的问题🥰   目录 ⭐栈的分类 ✨顺序栈 🎈优点: 🎈缺点: ✨链栈 🎈优点: 🎈缺点: ⭐基本概念 ✨栈: ✨栈顶: ✨栈顶: ✨图片理

    2023年04月22日
    浏览(34)
  • 【C++11】简介、列表初始化、声明、范围for、STL中的一些变化

    在2003年C++标准委员会曾经提交了一份技术勘误表(简称TC1),使得C++03这个名字已经取代了C++98称为C++11之前的最新C++标准名称。不过由于C++03(TC1)主要是对C++98标准中的漏洞进行修复,语言的核心部分则没有改动,因此人们习惯性的把两个标准合并称为C++98/03标准。 从C++0x到C++1

    2024年02月01日
    浏览(43)
  • 掌握 C# 变量:在代码中声明、初始化和使用不同类型的综合指南

    变量是用于存储数据值的容器。 在 C# 中,有不同类型的变量(用不同的定义),例如: int - 存储整数(没有小数点的整数),如 123 或 -123 double - 存储浮点数,有小数点,如 19.99 或 -19.99 char - 存储单个字符,如 \\\'a\\\' 或 \\\'B\\\'。 Char 值用单引号括起来 string - 存储文本,如

    2024年01月17日
    浏览(37)
  • 【已解决】错误:只允许在 C99 模式下使用‘for’循环初始化声明

    运行3DFFA_v2_master项目 运行sh build.sh脚本文件 环境:centos python3.7 render.c: 在函数‘_render’中: render.c:43:5: 错误:只允许在 C99 模式下使用‘for’循环初始化声明 for (int i = 0; i ntri; i++) render.c:43:5: 附注:使用 -std=c99 或 -std=gnu99 来编译您的代码 render.c:75:14: 错误:‘i’重定义 for

    2024年02月08日
    浏览(78)
  • 17. C++ static、const 和 static const 类型成员变量声明以及初始化

    1. C++ static、const 和 static const 类型成员变量声明以及初始化 const 定义的常量在超出其作用域之后其空间会被释放; static 定义的静态常量在函数执行后不会释放其存储空间; 1.2 static static 表示的是静态的 类的静态成员函数、静态成员变量是和类相关的,而不是和类的具体对

    2024年01月18日
    浏览(44)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包