结构体类型名和变量名以及离不开的typedef
文章目录
- 结构体定义
- 结构体类型名和变量名
- 结构体与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相关推荐
- 【C 语言】结构体 ( 结构体类型定义 | 结构体类型别名 | 声明结构体变量的三种方法 | 栈内存中声明结构体变量 | 定义隐式结构体时声明变量 | 定义普通结构体时声明变量 )
文章目录 一.结构体类型定义 二.结构体类型别名 三.结构体类型变量声明 1.使用结构体类型 ( 别名 ) 声明变量 2. 定义隐式结构体时声明变量 3.定义普通结构体时声明变量 二.完整代码示例 一 ...
- 【C语言】结构体类型和结构体变量(字节对齐)
目录 一.结构体类型定义 二.结构体变量的定义 ①先定义结构体类型,再定义结构体变量 ②在定义结构体类型的同时,定义结构体变量 ③直接定义结构体变量 三.结构体变量的内存分配 四.结构体变量的初始化 ...
- 结构体类型、联合体类型
结构体和联合体 一.结构体类型 1. 结构体类型的设计和初始化 2. 结构体大小的计算 3. 结构体成员的访问和赋值 4. 结构体类型和指针 (1)变量名为指针时: (2)结构体赋值时容易出现的问题: ...
- 【C 语言】结构体 ( 结构体类型变量初始化 | 定义变量时进行初始化 | 定义隐式结构体时声明变量并初始化 | 定义普通结构体时声明变量并初始化 )
文章目录 一.结构体类型变量初始化 1.定义变量时进行初始化 2.定义普通结构体时声明变量并初始化 3.定义隐式结构体时声明变量并初始化 二.完整代码示例 一.结构体类型变量初始化 1.定义变量时进行 ...
- 结构体类型(struct)
一.定义结构 结构体特点: 1.结构是由不同数据类型的数据组成的集合体. 2.结构由数目固定的成员构成 3. 各成员可以具有不同的数据类型 4.一个结构变量在内存占有一片连续的存储空间 定义结构体需要 ...
- 指向结构体类型的指针
结构体变量的指针就是该变量所占据的内存段的起始地址.可以定义一个指针变量来指向一个结构体变量,也可以动态分配内存存放结构体各成员数据. 与指向普通数据类型的指针变量相同,也可以定义指向结构体数据类型的 ...
- C语言程序设计 使用结构体类型处理组合数据——用户自定义数据类型
1 定义和使用结构体变量 1.1 自定义建立结构体类型 好处:反映出成员之间的内在联系. 在程序中建立所需要结构体类型.例如: 指定了一个新的结构体类型struct student. struct是声 ...
- c语言中结构体类型定义的函数指针,结构体中定义函数指针
结构体指针变量的定义 定义结构体变量的一般形式如下:形式1:先定义结构体类型,再定义变量struct 结构体标识符{ 成员变量列表;-};struct 结构体标识符 *指针变量名;变量初始化:stru ...
- C语言 struct <结构体类型名> 结构体变量名
#include<stdio.h> int main(int argc, char* argv[]) {char name[20] = "拉稀";char dogcla ...
最新文章
- Alpha 冲刺 (8/10)
- 跨站请求伪造(CSRF)-简述
- ES6学习笔记(三)—— Set 和 Map
- AsyncTask异步加载的源码分析与实现实例
- Java使用lambda进行分页,SpringBoot(八):整合mybatis,通用mapper,分页插件,lambda,Logger,junit用法...
- [Javascript] Functor Basic Intro
- iOS 通讯录编程【总结】
- Java神鬼莫测之MyBatis中$与#的区别(五)
- 人工智能 一种现代方法 第8章 一阶逻辑
- 微信小程序商城开发记录一之需求分析
- b250支持服务器cpu,b250m主板上什么cpu
- 我所理解的SOLID原则
- 部署DNS从服务失败,nslookup访问www.linuxprobe.com失败
- 2022高处安装、维护、拆除考试题库模拟考试平台操作
- HTML5 是对 HTML 标准的第五次修订
- 【日志】珂学——珂朵莉树
- ThinkPad X1 Carbon 安装Ubuntu 18.04到移动硬盘 教程指南
- 今日头条自媒体平台实操经验分享,让你月入上万不是梦
- 【推荐算法论文】AutoRec
- 通过单细胞RNA-seq揭示TNBC中的亚克隆异质性和侵袭性疾病状态
热门文章
- hypermill后处理制作视频教程 宏 五轴 车铣后处理制作教程
- 奥秘之家北京崇文门店实习------引导员
- Oracle P6软件采购专业工作的特点
- 史上最污技术解读...啊哈~“好变态”~~~
- iOS开发准备篇-(2)Mac OS X截图操作
- 做硬核老爸,我用 Python
- 第一性原理系列:创新是新知识的大规模交付
- 《干法》-稻盛和夫的经典内容赏析
- 小黑算法成长日记18:基于Prim算法的最小生成树
- c语言图像剪影代码,信息系C语言社团活动剪影-南京商业学校.PDF