软件构架(硬件无关、接口、分层)方法

合集下载

软件架构设计的分层与模块化

软件架构设计的分层与模块化

软件架构设计的分层与模块化软件架构设计是指在软件开发过程中,对软件系统的整体框架和结构进行规划和设计。

良好的软件架构设计可以提高软件的可维护性、可扩展性和可重用性,使软件具备更好的扩展性和适应性。

在软件架构设计中,分层与模块化是两个关键的设计原则。

本文将深入探讨软件架构设计中分层与模块化的概念、特点以及应用。

一、分层设计分层设计是一种将软件系统划分为不同层次的设计思想,每一层都有明确的职责与功能。

通过分层设计,可以将复杂的系统划分为相对独立的模块,各个模块之间通过接口进行通信和交互,降低了模块之间的耦合度,提高了系统的灵活性和可维护性。

典型的软件分层设计包括三层架构和MVC架构。

1. 三层架构三层架构是指将软件系统分为表示层、业务层和数据层三个层次,并且每个层次有着不同的职责和功能。

表示层主要负责用户界面的展示与交互,将用户请求传递给业务层进行处理;业务层负责处理具体的业务逻辑,对外暴露接口供上层调用;数据层则负责数据的访问和持久化,与数据库进行交互。

三层架构的优点是模块清晰、耦合度低、易于维护,适用于大型软件系统的开发。

2. MVC架构MVC(Model-View-Controller)架构是一种常用的应用程序设计架构,将软件系统划分为模型层、视图层和控制器层三个部分。

模型层负责处理业务逻辑和数据操作;视图层负责界面的显示和用户交互;控制器层负责协调模型层和视图层的交互,并根据用户的请求进行处理。

MVC架构的优点是良好的模块划分,易于扩展和维护,适用于中小型软件系统的开发。

二、模块化设计模块化设计是将软件系统划分为相互独立、具有一定功能的模块,每个模块都有自己的职责和接口。

通过模块化设计,可以将复杂的系统分解成多个小的模块,每个模块可独立开发和测试,提高了开发效率和质量。

常用的模块化设计方法有面向对象编程和微服务架构。

1. 面向对象编程面向对象编程是一种将问题分解成多个对象,并将对象组织成相互交互的模块的编程思想。

软件的三层架构

软件的三层架构

基于软件三层架构的研究报告引言三层结构是传统的客户/服务器结构的发展,代表了企业级应用的未来,典型的有Web下的应用。

多层结构和三层结构的含义是一样的,只是细节有所不同。

之所以会有双层、三层这些提法,是因为应用程序要解决三个层面的问题。

一、软件架构和分层(一)软件架构(software architecture)是一系列相关的抽象模式,用于指导大型软件系统各个方面的设计。

软件架构是一个系统的草图。

软件架构描述的对象是直接构成系统的抽象组件。

各个组件之间的连接则明确和相对细致地描述组件之间的通讯。

在实现阶段,这些抽象组件被细化为实际的组件,比如具体某个类或者对象。

在面向对象领域中,组件之间的连接通常用接口(计算机科学)来实现。

软件体系结构是构建计算机软件实践的基础。

与建筑师设定建筑项目的设计原则和目标,作为绘图员画图的基础一样,一个软件架构师或者系统架构师陈述软件构架以作为满足不同客户需求的实际系统设计方案的基础。

(二)分层分层是表示将功能进行有序的分组:应用程序专用功能位于上层,跨越应用程序领域的功能位于中层,而配置环境专用功能位于低层。

分层从逻辑上将子系统划分成许多集合,而层间关系的形成要遵循一定的规则。

通过分层,可以限制子系统间的依赖关系,使系统以更松散的方式耦合,从而更易于维护。

子系统的分组标准包含以下几条规则可见度。

各子系统只能与同一层及其下一层的子系统存在依赖关系。

(三)使用分层架构开发的必要性1、分层设计允许你分割功能进入不同区域。

换句话说层在设计是就是逻辑组件的分组。

例如,A层可以访问B层,但B层不能访问A 层。

2、用分层的方法,以提高应用程序的可维护性,并使其更容易扩展,以提高性能。

(四)设计分层的原则1、层意味着组建的逻辑分组。

例如,对用户界面,业务逻辑和数据访问组建应该使用不同的不同的层。

2、在一个层内组建应该聚合的。

如业务层组建仅应提供与业务逻辑相关的操作,而不是提供其他操作。

单片机程序架构和分层

单片机程序架构和分层

单片机程序架构通常采用分层设计,以增强程序的可移植性、可维护性和模块化。

以下是一些常见的分层方式:
1.管理层:这一层负责整个系统的协调和管理,包括系统初始化、任务调度、资源管理等。

它通常是与硬件无关的部分,负责决策和策略的实施。

2.具体设备层:这一层包含与特定硬件设备直接交互的代码,例如按键、屏幕、传感器等。

这些代码通常包含了设备驱动程序,负责具体的硬件操作。

3.内核抽象层(KAL):这一层提供了对操作系统或内核功能的抽象,使得上层应用不需要关心底层的具体实现细节。

这样可以在不同的操作系统或内核之间移植应用程序。

4.芯片抽象层(CAL):这一层是对微控制器特定功能(如定时器、串口、ADC等)的抽象,它封装了与芯片相关的操作,为上层提供统一的接口。

5.应用层:这是最接近用户的一层,包含了用户界面、业务逻辑等。

它使用下层提供的服务来完成具体的功能。

6.驱动层:这一层包含设备的驱动程序,负责直接与硬件通信,如SPI、I2C等通信协议的实现。

7.固件层:这是最底层,通常是由官方提供的库函数,直接对寄存器进行操作,是与硬件最接近的软件层次。

总的来说,在设计单片机程序时,采用分层思想可以提高程序的可读性和可维护性,同时也便于团队协作开发。

每一层都有其特
定的职责,上层依赖于下层提供的服务,而不需要关心服务的实现细节。

这种分层屏蔽的思想不仅存在于单片机程序设计中,也是许多复杂系统设计中的常见做法,如操作系统、网络协议等都是基于分层架构设计的。

软件架构设计:选择合适的架构模式

软件架构设计:选择合适的架构模式

软件架构设计:选择合适的架构模式在软件开发过程中,选择合适的架构模式对于构建高效、可扩展和可维护的软件系统至关重要。

架构模式是一种在设计阶段用于解决常见问题的通用解决方案,它提供了一种结构化的方法,帮助开发团队组织和管理系统的各个组件。

本文将介绍几种常见的架构模式,并且讨论如何选择合适的架构模式。

首先,我们来介绍一下几种常见的架构模式。

1.分层架构模式:分层架构模式将软件系统划分为多个层次,每个层次负责完成不同的功能。

常见的层次包括表示层、业务逻辑层和数据访问层。

这种模式的优势是各个层次之间的耦合度较低,易于维护和修改。

2. MVC架构模式:MVC是Model-View-Controller的缩写,是一种将软件系统分为三个部分的架构模式。

Model负责处理逻辑和与数据交互,View负责向用户展示数据,Controller负责协调Model和View 之间的通信。

这种架构模式的优势是松散耦合,易于测试和维护。

3.客户端-服务器架构模式:客户端-服务器架构模式是将软件系统分为两个独立的部分,客户端负责与用户进行交互,服务器负责处理业务逻辑和数据存储。

这种模式的优势是可扩展性和灵活性。

4.微服务架构模式:微服务架构模式将一个大型系统拆分成多个小的、独立的服务。

每个服务都有自己的数据库和接口,可以独立部署和扩展。

这种模式的优势是可伸缩性和灵活性。

选择合适的架构模式需要考虑多个因素。

首先,要考虑系统的规模和复杂性。

如果系统较小且功能简单,可以选择简单的架构模式,如分层架构模式。

而对于大型系统或复杂系统,更适合选择更高级的架构模式,如微服务架构模式。

其次,要考虑系统的可维护性和可扩展性。

如果系统需要经常进行修改和扩展,那么选择松散耦合的架构模式,如MVC架构模式或微服务架构模式,可以更方便地进行系统的修改和扩展。

另外,还要考虑团队成员的技术背景和熟悉度。

团队成员对于某种架构模式是否熟悉和了解,以及是否具备相应的技术能力,也是选择合适的架构模式的考虑因素之一。

计算机系统架构计算机硬件和软件架构

计算机系统架构计算机硬件和软件架构

计算机系统架构计算机硬件和软件架构计算机系统架构——计算机硬件和软件架构计算机系统架构是指计算机硬件和软件之间的组织和交互关系,它对计算机系统的性能、可靠性和扩展性起着至关重要的作用。

计算机系统架构的设计需要兼顾硬件和软件两方面,使得它们能够更好地协同工作,以实现计算机系统的高效运行。

下面将从计算机硬件与软件架构的角度来探讨计算机系统架构的重要性及其设计原则。

1. 计算机硬件架构计算机硬件架构指的是计算机系统中各种硬件组件之间的布局、连接方式以及它们之间的协同工作方式。

计算机硬件架构的设计需要考虑诸多因素,包括处理器、内存、磁盘、输入输出设备等。

一方面,这些硬件组件需要合理地布局和连接,以确保数据能够高效地在各个组件之间流动;另一方面,这些硬件组件还需要具备良好的扩展性和可靠性,以适应不同应用场景的需求。

2. 计算机软件架构计算机软件架构指的是计算机系统中软件组件之间的组织结构、接口规范以及软件运行的方式。

计算机软件架构的设计需要考虑如何将系统功能划分为各个模块,并确定它们之间的协作关系。

合理的软件架构能够提高系统的可维护性和可扩展性,降低软件开发和维护的成本,同时还能够提高系统的性能和可靠性。

3. 计算机系统架构的重要性计算机系统架构的设计直接影响到计算机系统的性能、可靠性和扩展性。

一个好的架构能够提高系统的吞吐量和响应速度,使得系统能够更好地满足用户的需求。

同时,合理的架构还能够提高系统的可靠性和容错性,当系统遭遇故障时能够更好地进行恢复和容错处理。

此外,一个具有良好架构的系统还能够更好地适应变化的需求,提高系统的可扩展性,降低后续扩展和维护的成本。

4. 计算机系统架构的设计原则(1)模块化:将系统划分为相互独立、功能单一的模块,每个模块实现一个特定的功能,模块之间通过明确定义的接口进行交互。

模块化的设计能够降低系统的复杂性,提高系统的可维护性和可扩展性。

(2)层次化:将系统划分为多层次的组件,每个组件承担一定的功能。

软件开发的常用架构

软件开发的常用架构

软件开发的常用架构在计算机科学领域,架构是指软件系统的基础结构,规定了系统中组件的交互方式和功能。

软件开发的架构决定了软件系统的可扩展性、可维护性和可重用性。

因此,选择正确的架构是相当重要的,可以使得软件系统具有更高的性能、更好的功能和更高的安全性。

下面介绍几种在软件开发中常用的架构。

1. 分层架构分层架构是最常见的软件架构之一,也称为三层架构。

该架构将应用程序分为三个层次:表示层、业务逻辑层和数据访问层。

这种架构的优点是它能够实现代码的复用,这是因为在分层架构中,开发人员可以方便地重复使用模块。

这种架构的另一个显著优点是它有助于应用程序的柔性。

因为系统的组件是独立的,所以在进行调整时,可以更轻松地修改其中的一层,而不影响其余的层次。

此外,分层架构也有助于不同的开发人员更好地协同工作,因为每个人都可以专注于自己层次的开发。

当然,分层架构也有一些缺点。

其中最主要的缺点是系统的复杂性。

由于系统被分为许多层次,因此它需要更多的代码来实现。

此外,在使用多个层次的过程中,数据流转会增加一定的时延。

2. 服务架构服务架构也称为面向服务架构(SOA),是一种基于服务的软件架构。

在这种架构下,在系统中各组件之间进行通信时,所使用的是网络服务。

在服务架构中,各模块可以通过共享这些服务与其他人进行通信,而不需要共享代码或数据。

服务架构的优点是它有助于避免耦合。

因为各个模块之间的通信是通过服务进行,所以当一个模块的代码发生变化时,其他模块的代码不会受到影响。

此外,在服务架构中,服务可以更容易地重新装配,因此可以更快地适应不同的需求。

服务架构也有一些缺点。

其中一个显著的缺点是它的性能降低。

由于系统需要通过网络服务通信,因此进行通信时会增加一定的时延。

此外,在处理多个服务时,可能出现复杂的问题。

3. 微服务架构微服务架构是一种分布式系统,它将应用程序分解为一组小型服务。

在该架构中,每个服务都运行在独立的进程中,并使用HTTP等协议进行通信。

软件架构设计过程

软件架构设计过程

软件架构设计过程软件架构设计是一个复杂的过程,涉及到多个方面和层次。

以下是一个简化的软件架构设计过程,帮助你了解这个过程:1.需求收集和分析:首先,需要收集和理解软件的需求。

这包括与利益相关者的沟通、编写需求文档、创建用例和场景等。

这一步的目标是明确软件需要做什么,以及它的主要功能和特性。

2.确定架构目标:基于需求,确定软件架构的目标。

这包括性能、可用性、可扩展性、可维护性、安全性等。

根据目标和需求,制定一个初步的架构愿景。

3.系统分解:将整个系统分解成多个组件或模块。

这一步是为了更好地管理和理解复杂的系统。

分解可以基于功能、技术或业务领域进行。

4.选择架构风格和模式:基于分解的结构,选择适合的架构风格和模式(例如,分层架构、事件驱动架构、微服务架构等)。

这些风格和模式有助于确保系统的结构合理且可维护。

5.定义组件和接口:定义各个组件的职责、功能和它们之间的交互。

这包括定义组件之间的接口、通信协议和数据格式。

6.数据设计:设计系统的数据结构,包括数据库模式、数据表、字段、关系等。

确定数据的一致性、冗余性和性能需求。

7.技术选型:根据需求和架构目标,选择合适的技术、工具和平台来支持架构的实现。

这包括选择编程语言、框架、数据库系统等。

8.物理架构设计:确定系统的部署方式和环境要求。

这包括服务器、网络、存储等方面的设计。

考虑系统的可伸缩性、可用性和安全性。

9.安全设计:确保系统能够抵御潜在的安全威胁,保护数据和资源的机密性、完整性和可用性。

设计适当的安全措施,如身份验证、授权控制等。

10.性能和容量规划:预测系统的性能需求和容量要求,并进行相应的规划。

这包括分析系统的响应时间、吞吐量、并发用户数等性能指标。

11.一致性和合规性检查:确保架构设计和选择符合既定的标准和规范,满足相关法律法规的要求。

12.评审和审查:组织专家或团队对软件架构进行评审和审查,确保设计的合理性和有效性。

13.文档编写和记录:将整个架构设计和决策过程记录在文档中,便于团队成员理解和遵循。

软件架构知识点总结

软件架构知识点总结

软件架构知识点总结一、软件架构的概念与重要性1. 软件架构的概念软件架构是指软件系统的设计和结构,它包括系统的组织结构、组件的相互关系、数据流程等方面。

软件架构不仅仅是对软件系统结构的描述,还包括对系统功能和性能的要求以及设计原则和技术方案的选择。

软件架构是软件系统的基础,对系统的整体性能、可维护性、可扩展性等都有着至关重要的影响。

2. 软件架构的重要性软件架构对于软件系统的成功与否有着重要的影响,它决定了系统的灵活性、可维护性、可扩展性,以及系统的可靠性、安全性等方面。

一个好的软件架构可以使系统易于维护和扩展,能够满足未来的需求变化,提高软件系统的稳定性和效率,降低系统开发和维护的成本。

二、常见的软件架构模式1. 分层架构分层架构是将软件系统划分为若干个层次,在每个层次中实现特定的功能。

典型的分层架构包括三层架构(Presentation Layer、Business Layer、Data Access Layer)和四层架构(Presentation Layer、Application Layer、Business Layer、Data Access Layer)。

分层架构将系统的功能模块化,提供了良好的可扩展性和可维护性。

2. 客户端-服务器架构客户端-服务器架构是将软件系统划分为客户端和服务器两部分,客户端负责用户界面显示和用户输入,服务器负责业务逻辑处理和数据存储。

客户端和服务器之间通过网络通信进行数据交互。

客户端-服务器架构适用于需要远程访问和数据共享的系统。

3. MVC架构MVC是Model-View-Controller的缩写,它将软件系统划分为数据层(Model)、用户界面层(View)和控制层(Controller)。

Model负责数据的处理和存储,View负责用户界面的显示,Controller负责应用逻辑的处理。

MVC架构将数据、用户界面和应用逻辑分离,提高了系统的可维护性和可扩展性。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

• Component:
• Hal.h
Snail Studio
>> 典型嵌入式系统构架
• 硬件抽象层典型框图
hal.h Component BSP Driver Embedded Hardware
Snail Studio
>> 基础培训
• • • • • 嵌入式C语言常用语法和扩展 典型嵌入式系统构架 面向接口开发及头文件包含规则 黑盒子开发原则 SVN使用
Snail Studio
• 标准数据类型
>> 嵌入式C语言常用语法和扩展
– 在C语言开发时尽可能使用标准数据类型
• 标准数据类型的定义(以8位机为例) typedef unsigned char uint8_t; typedef signed char int8_t; typedef unsigned short uint16_t; typedef signed short int16_t; typedef unsigned int uint32_t; typedef signed int int32_t; … • 头文件的包含(stdint.h)
>> 嵌入式C语言常用语法和扩展
Snail Studio
• 尾端(Endian)
– 大/小端转换示意图
>> 嵌入式C语言常用语法和扩展
Snail Studio
>> 典型嵌入式系统构架
• 典型的裸机构架
Application Layer
• 典型的操作系统构架
Application Layer
Services Layer
Snail Studio
• 内存对齐方式
– 对齐到字节
>> 嵌入式C语言常用语法和扩展
– 对齐到双字节
– 对齐到4字节
Snail Studio
• 尾端(Endian)
– 大端系统(Big-endian)
>> 嵌入式C语言常用语法和扩展
• 逻辑最高位存储在物理最低位;逻辑较高位存储在物理较低位的内存 模式称为大端对齐;使用该存储模式的计算机系统称为大端系统;
OS / OS Service Layer
Hardware Abstract Layer Embedded Hardware Software Framework
Services Layer
Hardware Abstract Layer Embedded Hardware
Snail Studio
>> 典型嵌入式系统构架
– 使用位掩码将指定二进制位置位
• <变量> |= <位掩码> 例如:wValueA |= _BME(3,6);
>> 嵌入式C语言常用语法和扩展
//!< 将BIT3~BIT6置位
– 使用位掩码将指定二进制位清零
• <变量> &= ~ <位掩码> 例如:wValueA &=~ _BME(2,10); //!< 将BIT2~BIT10清零
– 一些关于内存分配方式优化的简单建议
• 当系统已经开发完成,在优化阶段,如果可能,为了追求系统的稳定 性,尽可能将所有的动态分配修改为静态分配 • 系统开发时,对于函数的编写,尽可能使用局部变量(动态分配)。 这既可以保证函数的可重入性;也可以给编译器留下足够的优化空间。 • 使用指针传递变量的时候要注意
– – – – 指针可以安全的传递静态分配的数据; 指针只能将栈分配的变量作为被调函数的传入参数; 不能将栈分配的变量地址作为函数的返回参数; 堆分配的变量,分配后要检查是否分配成功(检查是否为NULL),释放 前要先将指针置空(设置为NULL);
– 要保证堆分配操作的原子性。
Snail Studio
– 栈分配 » 理论上所有的局部变量是栈分配,实际上很多小数据类型的局部 变量是分配在寄存器页上的(使用寄存器来存储) – 堆分配 » 使用malloc以及相关函数分配的存储器资源 » 使用自己编写的动态内存管理程序分配的静态内存
Snail Studio
• C语言存储器分配
>> 嵌入式C语言常用语法和扩展
– 一个行为确定的位定义方式
• #define _BV(__N) ((uint16_t)1 << (__N))
Snail Studio
• 位掩码的获取
>> 嵌入式C语言常用语法和扩展
– 获取从BIT0开始的n个连续二进制位掩码
#define _BM(__N) (_BV(__N) – 1) //借助_BV()来定义 #define _BM(__N) ((uint32_t)1 << (__N)) //直接定义法 例如 uint16_t hwValue = wValue & _BM(4); // 取BIT0~BIT3
• 一个数字本身语义明确的例子 PORTA |= _BV(1); //!< 将PA1置位 • 一个需要对位编号宏定义的例子 #define XXEN _BV(1) //!< XX模块的使能标志位 #define XXIEN _BV(3) //!< XX模块的中断使能标志位 … XXCR |= XXEN | XXIEN; //!< 开启XX模块并使能中断 或者 #define XXEN 1 #define XXIEN 3 … XXCR |= _BV(XXEN) | _BV(XXIEN);
– 如果写“1”可以实现清零,而写“0”没有效果,则不可以使用逻辑位运算 操作该寄存器(除非特别用掩码绕开对应二进制位) 造成这种限制的原因是,假使寄存器中某状态标志为1,我们通过逻辑位 运算对该寄存器进行操作的时候,实际上分为3步: 1)将寄存器值读出 2)改写寄存器的目标二进制位,同时不影响其它位 3)将修改后的值写回。 问题就出在第三步,因为某状态标志是1,而对该状态标志写1会自动清 零该标志,这就导致了无意间的一个误操作。 – 如果写“0”可以实现清零,而写“1”没有效果,则可以使用逻辑位运算
– 在GCC和IAR DLIB模式下直接使用#include <stdbool.h> – 在IAR CLIB和其他编译环境下可以自行定义
• 使用与处理器位数等宽的变量类型作为布尔型变量的基础类型
– 8位机 typedef uint8_t bool; – 16位机 typedef uint16_t bool; – 32位机 typedef uint32_t bool; 这样做的目的是保证处理器能在大部分条件下保证bool变量访问的原子性。
• 硬件抽象层
– 相关定义
• Driver: • BSP: 与芯片外设直接相关的驱动程序 与芯片所在电路板上外围电路直接相关的驱动程序 通常包括调用Driver根据电路板的功能封装和固定 出一些硬件功能。比如调用GPIO驱动封装出LED 控制的驱动程序。 某些芯片外围硬件模块的驱动,比如LCD模块,比 如wifi模块驱动等等。Component通常要调用芯片 的外设驱动。Component和BSP的区别是,BSP的 很多驱动仅仅是针对目标电路板的;而Component 则针对某些固定模块编写的,具有很强的“软构件” 属性。另外,某些模拟的外设,比如模拟的IIC接口 也以Component的形式存在。 上层系统访问硬件抽象层的唯一接口
Snail Studio
• 位运算原则
>> 嵌入式C语言常用语法和扩展
– 如果一个寄存器同时拥有“状态标志位”和“控制标志位”
• 如果状态标志位始终是只读的,则可以使用普通的逻辑位运算对该寄 存器进行操作 • 如果状态标志位是可写的则需要注意检查这些标志位写0和写1的意 义,因为可能存在以下陷阱;
Snail Studio
• C语言存储器分配
>> 嵌入式C语言常用语法和扩展
– 使用指针进行“危险类型转换的精髓”:
• 因为指针本质就是一个整型变量,因此可以通过赋值的方法修改指针 的“属性A” 例如: uint16_t hwValue[2] = {0x1234,0x5678}; uint16_t *phw = hwValue; //!< 设置属性A … phw = &hwValue[1]; //!< 修改属性A • 通过强制类型转换的方式,可以临时修改一个指针所指向变量的“属 性B”和“属性C” 例如: float fValue = 3.1415926; uint8_t *pchArray = (uint8_t *)&fValue; //!< 修改属性B和C
– 获取从指定位置开始的n个连续二进制位掩码
#define _BME(__N1,__N2) (_BM((__N2)+1) - _BM((__N1)))
例如 uint16_t hwValue = wValue & _BME(4,7); // 取BIT4~BIT7
Snail Studio
• 基本的逻辑位运算
– GCC中直接使用 #include <stdint.h> – IAR中 » 使用DLIB的情况下直接使用 #include <stdint.h> » 使用CLIB的情况下应该在compiler.h中手工定义
Snail Studio
• Boolean型的定义和使用
>> 嵌入式C语言常用语法和扩展
• C语言存储器分配
>> 嵌入式C语言常用语法和扩展
– C语言中的变量从存储器的角度来说具有3个属性
• 起始地址(属性A) • 占用的连续存储空间大小(属性B) • 如何操作这段存储器(属性C)
– 指针是一个整型变量,保存“属性A”——这是运行时刻可以修改的 – 指针的类型用来表示“属性B”和“属性C”——这些信息是编译时刻 确定的,不可修改,并且只能通过影响操作指针相关的代码来存 储和表示。
相关文档
最新文档