文章目录

  • 结构体定义
  • 结构体类型名和变量名
  • 结构体与typedef
    • 什么是typedef?
    • typedef和结构体应用

结构体定义

结构体的定义如下所示,struct为结构体关键字,tag为结构体的标志,member-list为结构体成员列表,其必须列出其所有成员;variable-list为此结构体声明的变量。

 struct tag { member-list } variable-list ;

在一般情况下,tag、member-list、variable-list这3部分至少要出现2个。

结构体类型名和变量名

首先来看一段代码:

 #include <iostream>
using namespace std;struct Lnode
{int data; /* data */
};
struct
{int data; /* data */
} node;

这段代码定义了两个结构体,这两个结构体都满足结构体的定义,三部分都至少出现了两部分,那什么是结构体类型名和变量名呢?在结构体的定义里面我们可以看到所谓的tag即结构体类型名。而variable-list为结构体的变量名。可以这么记,括号前面的是类型名,括号后面的是变量名。

根据上面的代码可以了解到一个结构体可以没有类型名或者变量名但不能同时没有两种。

那如何使用结构体类型名和变量名呢?

通过上图可以看到我们通过类型名去直接使用结构体变量时出现了错误,而变量名使用结构体变量没有报错。所以,结构体里面是不能直接通过类型名去使用变量的。正确的定义如下:

首先我们应该通过类型名去定义一个新变量名L,然后通过L去调用结构体变量data。在c语言里我们使用struct Lnode L定义新的结构体变量L,而我这里没有写struct(这是个坏习惯),是因为vscode这里的Lnode隐指struct Lnode,所以就没有写,但我们要明白这里的Lnode就是stcrut Lnode。

结构体与typedef

什么是typedef?

typedef为现有类型创建别名,定义易于记忆的类型名。

什么意思呢?就是说我现在有一个变量名命名为abcd…xyz,总之就是名字很长,我不能用的时候每次都打26个字母吧,这真的是有点傻瓜。在不改变变量名的前提下,有什么办法呢?用typedef。我直接给abcd…xyz起个别名叫Abe Shinzō,是不是就短了很多。
明白了typedef是干什么的。再来说说typedef和结构体的关系。

typedef和结构体应用

还是先看代码:

#include <iostream>
using namespace std;typedef struct Linklist
{int data; /* data */
} L;int main()
{Linklist L1;L1.data = 5;L newL;newL.data = 666;
}

根据上面的知识我们了解到,Linklist是类型名,而L为变量名。我们来调用一下试试看对不对!

首先可以看到Linklist作为类型名定义一个新的变量名没有出错。来看变量名L,我焯,怎么报错了??? 根据上面的知识L不是变量名吗?为什么直接使用会出错呢?嘿嘿,你又年轻了,这里因为typedef的存在导致变量名不是变量名,而成为了类型名。我们把光标放在L上看看。

可以看到此处的L隐指的是typedef Linklist L,所以此处的L因为typedef的存在变成了typedef Linklist L的别名,也就是说L成为了缩减版的类型名。

搞清楚了类型名和变量名以及typedef在结构体里的意义,我们该如何调用呢?

#include <iostream>
using namespace std;typedef struct Linklist
{int data; /* data */
} L;int main()
{Linklist L1;L1.data = 23333;L newl;newl.data = 66666;
}

再来解释一下,这段代码里面Linklist为类型名,而L因为typedef的存在成为了struct Linklist的缩减版存在,所以L也是一个类型名。所以通过L newl 定义新的结构体变量名newl,然后再去使用结构体变量就不会出错啦。

好了,码字不易,我相信你一定可以看懂这篇文章。因为我真的懂了。

结构体类型名和变量名以及离不开的typedef相关推荐

  1. 【C 语言】结构体 ( 结构体类型定义 | 结构体类型别名 | 声明结构体变量的三种方法 | 栈内存中声明结构体变量 | 定义隐式结构体时声明变量 | 定义普通结构体时声明变量 )

    文章目录 一.结构体类型定义 二.结构体类型别名 三.结构体类型变量声明 1.使用结构体类型 ( 别名 ) 声明变量 2. 定义隐式结构体时声明变量 3.定义普通结构体时声明变量 二.完整代码示例 一 ...

  2. 【C语言】结构体类型和结构体变量(字节对齐)

    目录 一.结构体类型定义 二.结构体变量的定义 ①先定义结构体类型,再定义结构体变量 ②在定义结构体类型的同时,定义结构体变量 ③直接定义结构体变量 三.结构体变量的内存分配 四.结构体变量的初始化 ...

  3. 结构体类型、联合体类型

    结构体和联合体 一.结构体类型 1. 结构体类型的设计和初始化 2. 结构体大小的计算 3. 结构体成员的访问和赋值 4. 结构体类型和指针 (1)变量名为指针时: (2)结构体赋值时容易出现的问题: ...

  4. 【C 语言】结构体 ( 结构体类型变量初始化 | 定义变量时进行初始化 | 定义隐式结构体时声明变量并初始化 | 定义普通结构体时声明变量并初始化 )

    文章目录 一.结构体类型变量初始化 1.定义变量时进行初始化 2.定义普通结构体时声明变量并初始化 3.定义隐式结构体时声明变量并初始化 二.完整代码示例 一.结构体类型变量初始化 1.定义变量时进行 ...

  5. 结构体类型(struct)

    一.定义结构 结构体特点: 1.结构是由不同数据类型的数据组成的集合体. 2.结构由数目固定的成员构成 3. 各成员可以具有不同的数据类型 4.一个结构变量在内存占有一片连续的存储空间 定义结构体需要 ...

  6. 指向结构体类型的指针

    结构体变量的指针就是该变量所占据的内存段的起始地址.可以定义一个指针变量来指向一个结构体变量,也可以动态分配内存存放结构体各成员数据. 与指向普通数据类型的指针变量相同,也可以定义指向结构体数据类型的 ...

  7. C语言程序设计 使用结构体类型处理组合数据——用户自定义数据类型

    1 定义和使用结构体变量 1.1 自定义建立结构体类型 好处:反映出成员之间的内在联系. 在程序中建立所需要结构体类型.例如: 指定了一个新的结构体类型struct student. struct是声 ...

  8. c语言中结构体类型定义的函数指针,结构体中定义函数指针

    结构体指针变量的定义 定义结构体变量的一般形式如下:形式1:先定义结构体类型,再定义变量struct 结构体标识符{ 成员变量列表;-};struct 结构体标识符 *指针变量名;变量初始化:stru ...

  9. C语言 struct <结构体类型名> 结构体变量名

    #include<stdio.h> int main(int argc, char* argv[]) {char name[20] = "拉稀";char dogcla ...

最新文章

  1. 词法作用域和动态作用域
  2. 2 通过JNI混合使用Java和C++ ----- 访问数组
  3. ubuntu 16.04修复固件刷新失败的LimeSDR-USB V1.4
  4. 亚马逊给创业者5条建议:开会杜绝PPT
  5. linux内核二当家,Linux PWN从入门到熟练(二)
  6. 正直、智慧、成熟、诚信——毒霸用人的基本原则
  7. IOS--文件管理NSFileManager
  8. 前端学习(2344):高阶组件和函数子组件
  9. 2万字!66道并发面试题及答案
  10. textaligncenter仍然不居中_5个word你不知道的功能
  11. python学习笔记(十二)之函数
  12. java调用sqluldr_java 使用 oracle sqluldr2 快速导出数据文件
  13. 5分钟了解什么是自然语言处理技术
  14. linux bridge 抓包,Linux bridge hairpin mode
  15. OpenCV剪切图片圆形区域
  16. 利用Canvas在浏览器上绘制复杂图形,比如:绘制一件衣服,绘制一条围巾,现阶段研究成果
  17. 笔记本购机测试软件大全
  18. 微信公众平台接口调试工具——蓝牙设备调试篇
  19. 手机设备唤醒计算机,手机遥控电脑开机神器!局域网唤醒App
  20. IE6及IE8默认SSL设置

热门文章

  1. 跳跳刷分php远吗_hostloc刷分PHP源码-多用户版
  2. 掉价最快的手机排行榜_最高降幅8K 第一季度降价最猛手机排行榜
  3. Autodesk Maya2013 激活
  4. Maya 对象打组 保护数据
  5. 时间的涟漪(Ripples of time)
  6. 无法识别的VS2019的卸载方法(含清理注册表)
  7. iphonex正面图_iPhoneX截图是什么样子
  8. 请检查您计算机的网络连接状态,Win10电脑玩lol英雄联盟提示无法连接服务器请检查您的网络连接的解决教程...
  9. Java 替换字符串中空格的三种方法
  10. 《蝴蝶效应》DVD全攻略