【C语言】结构体类型名、变量名以及typedef

2024-03-20 12:36

本文主要是介绍【C语言】结构体类型名、变量名以及typedef,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 分类判断
  • 结构体成员的使用
  • typedef


分类判断

struct tag
{char m;int i;
}p;

假设定义了上面这一个结构体,tag 就是类型名, p 就是变量名, mi 就是结构体成员列表。
可以这么记,括号前面的是类型名,括号后面的是变量名。

一般情况下,类型名,变量名,结构体成员至少需要两个才能构成结构体。


结构体成员的使用

int main()
{tag.i = 123;p.i = 123;return 0;
}

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

int main()
{struct tag  s;s.i = 123;return 0;
}

这是main函数中,我们使用struct tag s定义了一个结构体变量s,并给它的成员变量i赋值为123。另外,还有一个全局的结构体变量p,也给它的成员变量i赋值为123。

typedef

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

它的作用说在不改变变量名的前提下,用typedef。给结构体起个别名,往往可以用在原来变量名很长的情况下

现在我们尝试运行下下面的代码

typedef struct tag
{char m;int i;
}p;int main()
{struct tag  s;s.i = 123;p.i = 123;return 0;
}

在这里插入图片描述
我们会发现两个情况

  1. s被成功定义了
  2. 原来可以的变量名p不可用了

原因是s虽然被成功定义了,但是p因为typedef的存在导致变量名不是变量名,而成为了类型名。我们把光标放在p上看看。
在这里插入图片描述

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

当然,这也是有解决方法,只要把p当成变量名使用就行了,具体情况如下

typedef struct tag
{char m;int i;
}p;int main()
{struct tag  s;s.i = 123;//p.i = 123;p d;d.i = 123;return 0;
}

好了,这就是全部了,这篇博客是我从别人那里借鉴的学习笔记,大家可以看看那个大佬的

链接: link

这篇关于【C语言】结构体类型名、变量名以及typedef的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/829460

相关文章

Java获取当前时间String类型和Date类型方式

《Java获取当前时间String类型和Date类型方式》:本文主要介绍Java获取当前时间String类型和Date类型方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录Java获取当前时间String和Date类型String类型和Date类型输出结果总结Java获取

C语言进阶(预处理命令详解)

《C语言进阶(预处理命令详解)》文章讲解了宏定义规范、头文件包含方式及条件编译应用,强调带参宏需加括号避免计算错误,头文件应声明函数原型以便主函数调用,条件编译通过宏定义控制代码编译,适用于测试与模块... 目录1.宏定义1.1不带参宏1.2带参宏2.头文件的包含2.1头文件中的内容2.2工程结构3.条件编

Go语言并发之通知退出机制的实现

《Go语言并发之通知退出机制的实现》本文主要介绍了Go语言并发之通知退出机制的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录1、通知退出机制1.1 进程/main函数退出1.2 通过channel退出1.3 通过cont

Go语言编译环境设置教程

《Go语言编译环境设置教程》Go语言支持高并发(goroutine)、自动垃圾回收,编译为跨平台二进制文件,云原生兼容且社区活跃,开发便捷,内置测试与vet工具辅助检测错误,依赖模块化管理,提升开发效... 目录Go语言优势下载 Go  配置编译环境配置 GOPROXYIDE 设置(VS Code)一些基本

SpringBoot改造MCP服务器的详细说明(StreamableHTTP 类型)

《SpringBoot改造MCP服务器的详细说明(StreamableHTTP类型)》本文介绍了SpringBoot如何实现MCPStreamableHTTP服务器,并且使用CherryStudio... 目录SpringBoot改造MCP服务器(StreamableHTTP)1 项目说明2 使用说明2.1

深入理解Go语言中二维切片的使用

《深入理解Go语言中二维切片的使用》本文深入讲解了Go语言中二维切片的概念与应用,用于表示矩阵、表格等二维数据结构,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧... 目录引言二维切片的基本概念定义创建二维切片二维切片的操作访问元素修改元素遍历二维切片二维切片的动态调整追加行动态

Go语言中make和new的区别及说明

《Go语言中make和new的区别及说明》:本文主要介绍Go语言中make和new的区别及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1 概述2 new 函数2.1 功能2.2 语法2.3 初始化案例3 make 函数3.1 功能3.2 语法3.3 初始化

Go语言中nil判断的注意事项(最新推荐)

《Go语言中nil判断的注意事项(最新推荐)》本文给大家介绍Go语言中nil判断的注意事项,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1.接口变量的特殊行为2.nil的合法类型3.nil值的实用行为4.自定义类型与nil5.反射判断nil6.函数返回的

Go语言数据库编程GORM 的基本使用详解

《Go语言数据库编程GORM的基本使用详解》GORM是Go语言流行的ORM框架,封装database/sql,支持自动迁移、关联、事务等,提供CRUD、条件查询、钩子函数、日志等功能,简化数据库操作... 目录一、安装与初始化1. 安装 GORM 及数据库驱动2. 建立数据库连接二、定义模型结构体三、自动迁

MySQL中的索引结构和分类实战案例详解

《MySQL中的索引结构和分类实战案例详解》本文详解MySQL索引结构与分类,涵盖B树、B+树、哈希及全文索引,分析其原理与优劣势,并结合实战案例探讨创建、管理及优化技巧,助力提升查询性能,感兴趣的朋... 目录一、索引概述1.1 索引的定义与作用1.2 索引的基本原理二、索引结构详解2.1 B树索引2.2