4.9 结构

2024-01-17 19:08
文章标签 结构 4.9

本文主要是介绍4.9 结构,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

什么是结构?哪些情况下需要使用结构?结构的语法要点?

结构的定义

在C++中, 结构 (structure)与类几乎是完全一样的类型,( 结构是一种数据类型 )差别仅仅在于缺省情况下结构的成员为公有的。

在C语言阶段,结构就已存在,但它只有公有的数据成员。正因为如此,C++程序员仍然使用结构,但是只为结构安排公有的数据成员。当只使用数据成员,而且这些数据成员的类型往往互不相同时,总是采用结构类型,而不采用类。因为这样程序更易读易懂。

定义结构类型的格式如下:
struct 结构类型名
{
    类型名 变量1;
    《类型名 变量2;…;》
};
//最后的分号不可少

例如,下面给出的库存货物(inventory、员工(employee)两个结构类型:

struct inventory
{
       char description[15] ; //货物名称
       char no[10] ; //货号
       int quantity ; //库存数量
       double cost ; //成本
       double retail ; //零售价格
} ;

struct employee
{
       char name[27] ; //员工姓名
       char address[30] ; //家庭住址
       long zip ; //邮政编码
       long telenum ; //联络电话
       double salary ; //工资
};

结构的使用——通过结构型变量

◆ 1、 结构是一种派生数据类型,定义结构时并不分配存储空间,只有定义了结构类型的变量,编译系统才为结构变量分配存储空间

定义变量方法如下:设有两个雇员———man1和man2,如此定义: employee man1 , man2 ;

◆ 2、 对结构变量可以在定义时初始化 。方法是:
在花括号中顺序填入结构中的(数据)成员的初始值:
    employee emp1={“朱明”,“四牌楼2号”,210096,83792666,2430.0},
    emp2={“沈俊”,“丁家桥15号”,210009,83273389,1920.0};

◆ 3、  结构变量的访问与类的对象一样,可使用成员访问操作符之一的“点操作符” ,对成员一个个进行:
    变量名 . 成员名

◆ 4、 与同类的对象之间可以拷贝一样,同结构类型的变量之间也可以作为整体相互赋值(拷贝)(因为结构的组成与大小是固定的,这一点与数组不同)

在C++中,赋值运算符“=”理解为 隐式拷贝赋值操作符 (Copy Assignment Operator)。如按前面的定义,emp1=emp2是合法的,这时emp2中的内容成为emp1的拷贝。但同类型变量不能比较大小。

◆ 5、 结构变量也可以作为函数的参数和返回值,结构作为参数也是按值(复制)进行传递的,当然也可以按引用传递。

在程序文件中强烈推荐将结构类型的定义放在所有函数的外面,这样程序文件中的各个函数可以按需要在各个函数中声明局部的结构变量。因为,在各函数中定义结构类型,即使两个函数中定义的完全一样,系统也完全认为是两种结构类型。

◆ 6、 结构可以嵌套 ,如上面所定义的员工(employee)结构类型可改为如下定义:
struct mail
{
       char address[30] ; //地址
       long int zip ; //邮政编码
       long int telenum ; //电话号码
};

struct employee
{
       char name[25] ; //员工姓名
       mail addinfo ; //结构变量作为成员,嵌套
       double salary ; //工资
};

结构成员必须是已定义过的结构,结构成员决不能是结构自身(这会引起无穷递归)。

访问结构变量的结构成员的方法: 用连续点号来访问结构变量的结构成员 。例如有程序段:
    employee emp1={“朱明”,“四牌楼2号”,210096,83792666,2430.0};
    cout<<emp1.addinfo.telenum ;

输出为:
    83792666。

这篇关于4.9 结构的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

百度OCR识别结构结构化处理视频

https://edu.csdn.net/course/detail/10506

微信小程序开发必知必会:文件结构和基本配置

一、微信小程序基本文件结构 1.  project.config.json:项目的基本配置文件,包括项目名称、appid、项目目录、页面文件夹等。     {"setting": {"urlCheck": false,"es6": true,"postcss": true,"nodeModulesPath": "D:\\\\node_modules"},"appid": "wxd678e

利用结构体作为函数参数时结构体指针的定义

在利用结构体作为函数的参数进行传递时,容易犯的一个错误是将一个野指针传给函数导致错误。 #include <stdio.h>#include <math.h>#include <malloc.h>#define MAXSIZE 10typedef struct {int r[MAXSIZE]; //用于存储要排序的数组,r[0]作为哨兵或者临时变量int length;

学习VXLAN -- 报文结构、原理和配置

目录 VXLAN背景什么是VXLANVXLAN的优势VXLAN报文结构一些特定名词BDVBDIFVAPVSIVSI-InterfaceAC VXLAN的实现原理图VXLAN MAC地址表项MAC地址动态学习 VXLAN隧道VXLAN隧道工作模式L2 GatewayIP Gateway VXLAN隧道的建立与关联VXLAN隧道建立的方式VXLAN对到与VXLAN关联的方式 配置VXLAN接入

【Vite】控制打包结构

配置 vite.config.json 文件: import { defineConfig } from "vite";export default defineConfig({// ...build: {rollupOptions: {output: {entryFileNames: "js/[name]-[hash].js",chunkFileNames: "js/[name]-[hash]

【PL理论深化】(3) MI 归纳法:归纳假设 (IH) | 结构归纳法 | 归纳假设的证明

💬 写在前面:所有编程语言都是通过归纳法定义的。因此,虽然编程语言本身是有限的,但用该语言编写的程序数量是没有限制的,本章将学习编程语言研究中最基本的归纳法。本章我们继续讲解归纳法,介绍归纳假设和结构性归纳法。 目录 0x00 归纳假设 (IH) 和结构归纳法 0x01 归纳假设的证明 0x00 归纳假设 (IH) 和结构归纳法 归纳法是一种用于证明归纳定义的集合中的元素所具有

SuiNS发布子名及新命名标准,推动Web3身份结构的进步

SuiNS子名是Sui Name Service的强大扩展,最近与新命名标准一起发布。子名允许用户在一个主要的SuiNS名下创建额外的自定义身份,而无需额外费用。用户 @gia 可以创建如 gaming@gia 或 lending@gia 这样的子名,从而增强个人组织和支持群组与组织的层级结构。 这一发展对于个人和企业都具有重要意义。通过子名,公司、DAO和其他组织可以为其用户或员工发放品牌账户

【深度C++】之“类与结构体”

0. 抽象数据类型 类(class) 和结构体(struct) 都是C++中的自定义数据类型,是使用C++实现面向对象编程思想的起点。 类的基本思想是数据抽象(data abstraction) 和封装(encapsulation)。 数据抽象是一种依赖于接口(interface) 和实现(implementation) 分离的编程技术。类的接口包括用户所能执行的操作;类的实现则包括类的数据

python代码结构(第四章)

第四章:代码结构 1.使用if、elif和else进行比较 disaster = True if disaster: print("woe!") else: print("whee!") 输出: woe! furry = True small = True if furry: if small: print("it's a cat") else: print("it's a beer") els

【PL理论深化】(2) 语法分析 (Syntax) | 编程语言的语法结构:文法 | 语义结构 (Sematics)

💬 写在前面:编程语言是由归纳法生成的程序的集合。定义属于该语言的程序的形式的规则,即编写程序的规则,称为编程语言的 语法分析 (syntax) 而定义属于该语言的程序的意义的规则称为 语义结构(semantics)。这两者都是归纳定义的。 目录 0x00 语法分析(syntax analysis) 0x01 编程语言的语法结构:文法(grammar) 0x02 语义结构(Seman