漫谈结构体

注意:

1.结构体是自定义数据类型,定义之后使用就跟使用库自带的int这些数据类型一样的。

2.定义结构体类型不会分配内存空间,定义变量才会。

1.匿名结构体(声明时创建变量,不然没啥用)

匿名结构体是没有定义类型名的结构体。它通常用于两种情况:

  1. 临时使用:匿名结构体可以在不定义具体类型的情况下快速创建一个结构体对象,并且可以在需要时直接使用。

  2. 嵌套结构体:匿名结构体可以作为另一个结构体中的字段,用于表示某个概念或属性的组合。这样可以在结构体中直接访问匿名结构体的字段,简化了代码结构

struct{char name[20];int age;
};

2.嵌套结构体

struct Employee {struct {char name[20];int age;} person;char department[20];
};

3.递归结构体(实现动态链接)

这两个结构体的定义在语法上有细微的区别。

第一个结构体的定义如下:

struct Node {int data;struct Node *next;
};

在这个定义中,struct Node明确指明了next成员的类型是指向struct Node类型的指针。在C语言中,结构体的成员访问需要使用->操作符。

第二个结构体的定义如下:

struct Node {int data;Node *next;
};

在这个定义中,Node是一个不完整的类型,没有使用struct关键字来指明它是一个结构体。这种写法在C语言中是不合法的,编译器会报错。

因此,这两个定义的区别在于对next成员类型的指定方式。第一个定义使用了struct Node *来明确指定next的类型是指向struct Node类型的指针;而第二个定义中,Node是一个不完整的类型,缺少了struct关键字,导致编译错误。

在C++语言中,可以使用Node来代替struct Node,因为C++允许直接使用结构体名字来访问成员(在C++中,默认的访问控制是public)。但是在C语言中,这种写法会导致编译错误。

4.常规结构体

以C语言举例

自定义数据类型

struct student{char name[20];int age;
};

再创建struct student类型变量a

int main() {struct student a;return 0;
}

也可以定义数据类型同时创建变量

struct student{char name[20];int age;
}a;

5.typedef的使用

通过使用typedef给数据类型起简洁的别名,从而提高代码的可读性和简洁性

在C语言中,typedef关键字用于为已有的数据类型取一个新的别名。它的使用规则如下:

  1. typedef的基本语法是:typedef 原类型名 新类型名

  2. typedef可以用于为基本类型、指针类型、数组类型和结构体类型等定义别名。

  3. 当使用typedef为一个结构体类型定义别名时,可以在结构体的定义中直接使用该别名,也可以在定义结构体变量时使用该别名。

  4. 如果在结构体定义时使用了typedef关键字,则不需要再写struct关键字来引用该结构体。

  5. typedef定义的别名,可以在当前作用域中使用,也可以在其他作用域中使用。

单别名
typedef struct Node {int data;Node* next;
}Node;
多别名(简单叠加)
typedef struct Node {int data;Node* next;
}Node,*Linklist;

Node是struct Node结构体类型的别名,可使用Node a;创建对应的变量

Linklist 是指向struct Node结构体类型的指针的别名,可使用Linklist a;创建对应的指针,而不需要声明指针变量时写明*。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/791047.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

React 入门

一、官网地址 英文官网: https://reactjs.org/中文官网: https://react.docschina.org/ 二、React 特点 声明式编码组件化编码React Native 编写原生应用高效(优秀的 Diffing 算法)高效的原因:1.使用虚拟DOM,不总是直接操作页面…

vultr ubuntu 服务器远程桌面安装及连接

一. 概述 vultr 上开启一个linux服务器,都是以终端形式给出的,默认不带 ui 桌面的,那其实对于想使用服务器上浏览器时的情形不是很好。那有没有方法在远程服务器安装桌面,然后原程使用呢?至少ubuntu的服务器是有的&am…

搜索--找出克隆二叉树中的相同节点

题目描述 给你两棵二叉树,原始树 original 和克隆树 cloned,以及一个位于原始树 original 中的目标节点 target。 其中,克隆树 cloned 是原始树 original 的一个 副本 。 请找出在树 cloned 中,与 target 相同 的节点&#xff…

AGI时代,LLM可以在AutoML哪些环节进行增强?

当下大模型技术发展如火如荼,颇有改变各行业和各领域的架势。那么对于AutoML来讲,LLM对其有哪些助力?对于这个问题,我们来问一问kimi chat,看看它怎么回答? 大型语言模型(LLM)可以在…

React|获取oss存储的文件,并转为json格式

使用axios通过oss的url获取.xlsx文件流,处理后得到json格式数据: 安装xlsx: npm install xlsx import axios from "axios"; import * as XLSX from "xlsx";//#region xlsx(oss) to json async function getFileStream(u…

Successive Convex Approximation算法的学习笔记

文章目录 一、代码debug二、原理 本文主要参考了CSDN上的 另一篇文章,但规范了公式的推导过程和修缮了部分代码 一、代码debug 首先,我们将所有的代码放到MATLAB中,很快在命令行中出现了错误信息 很显然有问题,但是我不知道发生…

dm8用户配置免密登录

dm8用户配置免密登录 基础环境 操作系统:Red Hat Enterprise Linux Server release 7.9 (Maipo) 数据库版本:DM Database Server 64 V8 架构:单实例1 操作系统认证(sysdba) 1.1 官方文档 《DM8安全管理》手册 2 用户…

湖仓管理系统 Amoro部署

简介 Apache Amoro(incubating) 是一个构建在 Apache Iceberg 等开放数据湖表格之上的湖仓管理系统,提供了一套可插拔的数据自优化机制和管理服务,旨在为用户带来开箱即用的湖仓使用体验。 Amoro 的愿景是依托于 Apache Iceberg、Apache Paimon 等新型数据湖表格式的基础功…

Java:线程、进程、多线程

在Java中,线程、进程和多线程是实现并发编程的关键概念。理解它们的定义、特点和如何使用它们对于创建高效、响应迅速的应用程序至关重要。 进程(Process) 进程是操作系统分配资源和调度的基本单位,它包含了程序的执行状态和所需…

微信小程序媒体查询

在微信小程序中,media媒体查询不支持screen关键字,因为小程序页面是再webview中渲染的,而不是在浏览器中渲染的。 在设置样式时,可以使用 wxss 文件中的 media 规则来根据屏幕宽度或高度设置不同的样式。 device-width:设备屏幕…

redis 性能管理

一、查看 redis 内存使用 info memory 1, 进入 redis 查看 2, redis 外查看 二 内存碎片率 1,used_memory_rss 表示该进程所占物理内存的大小,即为操作系统分配给 Redis 实例的内存大小。 2,used_memory Redis …

手机领域的平台之战

平台应用的模式最早是从手机应用开始的。在管理软件领域,最早是各厂商自己做自己的App。OA厂商、CRM厂商、HR厂商等等,都推自己的APP。现在逐步放弃了自有App,转向小程序。也就是平台之战第一阶段结束,几个大厂干掉了千千万万个小…

git如何正确合并分支

在 Git 中,合并分支是一个常见的操作,它允许你将一个分支的更改集成到另一个分支中。以下是一些正确合并分支的步骤和最佳实践: 合并前需要add和commit -m 提交到本地仓库在进行合并 1. 查看分支状态 在合并之前,最好先查看当前仓…

【智能算法】猎豹优化器(CO)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献 1.背景 2022年,MA Akbari等人受到自然界中猎豹捕猎行为启发,提出了猎豹优化器(The Cheetah Optimizer,CO)。 2.算法原理 2.1算法思想 CO法对猎…

机器学习的模型校准

背景知识 之前一直没了解过模型校准是什么东西,最近上班业务需要看了一下: 模型校准是指对分类模型进行修正以提高其概率预测的准确性。在分类模型中,预测结果通常以类别标签形式呈现(例如,0或1)&#xf…

Python程序设计 单例模式

1. 单例设计模式 设计模式设计模式 是 前人工作的总结和提炼,通常,被人们广泛流传的设计模式都是针对 某一特定问题 的成熟的解决方案使用 设计模式 是为了可重用代码、让代码更容易被他人理解、保证代码可靠性单例设计模式目的 —— 让 类 创建的对象&…

mac 上通过命令行挂载NTFS硬盘,使其可以进行读写

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言1. 安装 osxfuse 和 ntfs-3g2. 挂载 NTFS 硬盘3. 卸载 NTFS 硬盘4. 自动挂载1. 找出设备UUID2. 编辑 /etc/fstab 文件3. 添加挂载信息4. 保存并退出编辑器5. 重…

【THM】Nmap Advanced Port Scans(高级端口扫描)-初级渗透测试

介绍 本房间是Nmap系列的第三个房间(网络安全简介模块的一部分)。在前两个房间中,我们了解了实时主机发现和基本端口扫描。 Nmap实时主机发现Nmap基本端口扫描Nmap高级端口扫描Nmap后端口扫描在Nmap基本端口扫描中,我们介绍了TCP标志并回顾了TCP 3 路握手。要启动连接,TC…

AcWing刷题-约数个数

约数的个数 代码 # 计数 def f(x)->int:cnt 0i 1while i * i < x:if x % i 0:cnt 1if i * i < x:cnt 1i 1return cntn int(input()) a list(map(int,input().split())) for i in a:print(f(i))

HDFSRPC通信框架参数详解

写在前面 请先阅读HDFSRPC通信框架详解&#xff0c;对整体框架先有一定的了解。 参数列表 参数默认值描述ipc.server.read.connection-queue.size100readeripc.server.read.threadpool.size1readeripc.server.listen.queue.size128Listener:backlogipc.server.tcpnodelaytru…