C语言struct person{...};person a;为什么编泽出错?

一、问题

        在结构体中定义⼀个变量,可以有很多种⽅法,为什么这样定义编译出错呢?

        例如:

struct persont{...};person a;

二、解答

        在解答编译出错的原因之前,先要了解⼏种正确的定义结构体类型变量的⽅法。

(1)先声明,再定义。

        上⾯问题中的代码也是先声明,再定义,但是在定义变量的时候没加关键字 struct,因此编译出错。正确的定义结构体变量的形式如下。

struct person {..);
struct person a,b;

        struct person 为结构体类型名,a 和 b 为结构体变量名。在定义了结构体变量后,系统会为之分配内存单元。

(2)在声明类型的同时定义变量。

        与(1)的例⼦作⽤相同,即定义了两个  struct person 类型的变量 a 和 b 。例如:

struct person {...}a,b;

        该定义⽅式的⼀般形式为:

struct 结构体名
{
成员表列;
}变量名表列;

(3)直接定义结构体类型变量。

        直接定义结构体类型变量就是没有出现结构体名,定义变量的⼀般形式为:

struct
{
成员表列;
}变量名表列;

        掌握了上述正确定义变量的⽅法后,来分析⼀下为什么题中所述的定义⽅法是错的呢?

        struct person{..} 实质上是声明了⼀个“结构标签”,即 person 只是这个结构体类型的⼀个标签,真正的类型名为 struet person。因此,在定义变量的时候,需要完整的类型名来定义,标签⽆法定义。

        在了解了上述出错原因后,再来考虑⼀下下⾯的声明与结构体的声明有什么不同?

例如:

typedef struct {...}A;

        结构体类型的声明实质上是声明了⼀个“ 结构标签 ”,⽽这个声明实质上是声明⼀个 “ 类型定义 ”。声明了⼀个新的类型名 A ,此时的 A 不是变量,⽽是⼀个此结构体类型的别名,它代表上⾯指定的⼀个结构体类型,这时可以⽤A定义⼀个变量,例如:

A a,b;

注意:

        上述代码不要写成 struct A a,b; 的形式。

三、总结

        在学习结构体时,要掌握并熟记定义结构体变量的⼏种⽅法,并理解结构体声明的实质意义。了解 typedef 的意思就是声明⼀个新的类型名代替已有的类型名。

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

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

相关文章

在echarts中使用geojson地图

以中国地图为例 先看效果 代码实现&#xff1a; <div id"refChinaMap" :style"{ width: 75%, height: 100% }"></div>import * as echarts from "echarts"; import ChinaJSON from "./chinaMap.json";const initChinaMa…

功率控制单元PCU系统简介

什么是PCU系统 近年来&#xff0c;新能源汽车市场竞争愈发激烈。电驱动系统关乎整车的制造成本&#xff0c;影响整车性能。因此&#xff0c;新能源汽车电驱动系统成为业内研究热点。电驱动系统作为新能源汽车的核心部件&#xff0c;控制电机输出驱动转矩或制动转矩&#xff0c…

c语言数据结构之一(单链表)

前言 链表是最基础的数据结构&#xff0c;可以用于实现栈、队列等等。 实现原理 节点&#xff08;Node&#xff09;&#xff1a;链表的基本构建单元是节点&#xff0c;每个节点包含两部分&#xff1a;数据和指向下一个节点的指针。在C语言中&#xff0c;节点通常用结构体来表…

什么是分布式事务?

典型回答 分布式事务是指在分布式系统中涉及到多个数据库或多个应用程序之间的事务处理&#xff0c;这些数据库或应用程序可能分布在不同的物理节点上&#xff0c;甚至可能位于不同的地理位置。在分布式事务中&#xff0c;需要确保所有参与者的事务操作都能够保持一致性&#…

三步学会苹果手机怎么关震动的方法!

苹果手机的震动功能在某些情况下可能会被认为是不必要的&#xff0c;比如在会议、课堂或者晚间睡眠时。因此&#xff0c;学会如何关闭苹果手机的震动功能是非常实用的。苹果手机怎么关震动&#xff1f;在本文中&#xff0c;我们将介绍三个步骤&#xff0c;帮助你关闭苹果手机的…

XSS-Labs 靶场通过解析(下)

前言 XSS-Labs靶场是一个专门用于学习和练习跨站脚本攻击&#xff08;XSS&#xff09;技术的在线平台。它提供了一系列的实验场景和演示&#xff0c;帮助安全研究人员、开发人员和安全爱好者深入了解XSS攻击的原理和防御方法。 XSS-Labs靶场的主要特点和功能包括&#xff1a;…

K邻算法:在风险传导中的创新应用与实践价值

程序员的实用神器 ⛳️ 写在前面参与规则&#xff01;&#xff01;&#xff01; ✅参与方式&#xff1a;关注博主、点赞、收藏、评论&#xff0c;任意评论&#xff08;每人最多评论三次&#xff09; ⛳️本次送书1~4本【取决于阅读量&#xff0c;阅读量越多&#xff0c;送的越…

Python 中使用私有成员的子类化

1、问题背景 Python 语言中&#xff0c;变量名与访问器同名是一个非常好的特性&#xff1a; self.__value 1def value():return self.__value但是&#xff0c;当我们想要子类化一个类&#xff0c;并访问其私有成员时&#xff0c;却没有一种简单的方法。通常&#xff0c;我们…

使用Spring Boot构建RESTful API的最佳实践

在使用Spring Boot构建RESTful API时&#xff0c;遵循一些最佳实践可以帮助你创建可维护、可扩展且安全的应用程序。以下是一些关键的最佳实践&#xff1a; ### 1. 使用Spring Initializr开始项目 Spring Initializr&#xff08;[https://start.spring.io/](https://start.spr…

接收文件(文件上传)

前端的请求内容 Content-Type: multipart/form-data; form-data; name"filedata"; filename"具体的文件名称" 后端定义接口 ApiOperation("文件上传接口")RequestMapping(value "/upload/coursefile", consumes MediaType.MULTIPA…

发挥企业力量,美乐家推动城市绿色发展

在当今时代&#xff0c;环保已成为衡量企业社会责任的重要标准之一。美乐家作为一个具有前瞻性的企业&#xff0c;深刻理解到这一点&#xff0c;并通过其行动积极展示了这种责任感。通过与中华环境保护基金会合作&#xff0c;美乐家开始全国范围内推动了“微行动&#xff0c;守…

C语言 | Leetcode C语言题解之第74题搜索二维矩阵

题目&#xff1a; 题解&#xff1a; bool searchMatrix(int** matrix, int matrixSize, int* matrixColSize, int target) {int m matrixSize, n matrixColSize[0];int low 0, high m * n - 1;while (low < high) {int mid (high - low) / 2 low;int x matrix[mid /…

等保测评—Linux-CentOS标准范例截图

密码输入错误无法登录 用户账户情况包含root、guanli、shenji 查看审计用户权限 身份鉴别&#xff1a; cat /etc/passwd&#xff0c;核查用户名和 UID&#xff0c;是否存在同样的用户名和 UID cat /etc/shadow&#xff0c;查看文件中各用户名状态 &#xff0c; 核查密码一栏为…

Springboot工程创建

目录 一、步骤 二、遇到的问题及解决方案 一、步骤 打开idea,点击文件 ->新建 ->新模块 选择Spring Initializr&#xff0c;并设置相关信息。其中组为域名&#xff0c;如果没有公司&#xff0c;可以默认com.example。点击下一步 蓝色方框部分需要去掉&#xff0c;软件包…

Win11安装Docker Desktop运行Oracle 11g 【详细版】

oracle docker版本安装教程 步骤拉取镜像运行镜像进入数据库配置连接数据库&#xff0c;修改密码Navicat连接数据库 步骤 拉取镜像 docker pull registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g运行镜像 docker run -d -p 1521:1521 --name oracle11g registry.cn-ha…

React常用组件分享

1、轮播组件&#xff1a; React Awesome Slider React Slider Carousel Component - react-awesome-slider

一起深度学习24/04/30——ResNet

ResNet神经网络 定义ResNet Block定义ResNet18加载数据集并训练、测试 定义ResNet Block ResNet Block 的作用&#xff1a; 是一个残差块&#xff0c;用于构建ResNet 主要是为了解决神经网络中的梯度爆炸和梯度消失问题&#xff0c;以及缓解训练过程中的退化问题。 在传统的神经…

【Spring Security注解详解】

Spring Security 是一个强大的、高度可定制的身份验证和访问控制框架&#xff0c;广泛用于Java应用程序中以确保安全。它提供了多种注解来简化安全控制的实现&#xff0c;特别是在方法级别的权限控制上。以下是几个核心的Spring Security注解及其用途的详细介绍&#xff1a; 1…

MySQL动态列转行

介绍​​ 在实际的数据库查询中&#xff0c;有时候我们需要将表中的动态列&#xff08;即列数不固定&#xff09;转换为行&#xff0c;以便更好地进行数据分析和展示。在MySQL中&#xff0c;可以通过使用一些技巧和函数来实现动态列转行的功能。本文将介绍怎么实现MySQL动态列…

提升执行力的方法论

2024-5-7记录于PR办公室 一个关于求职的节目&#xff0c;提到如果在一个岗位做了多年&#xff0c;不论你是产品经理或项目经理&#xff0c;是否总结出一套产品/项目/研发的方法论。就这件事&#xff0c;我咨询过一个C语言大师星哥&#xff0c;他是这样说的:一件事在不同的时间段…