当前位置: 首页 > news >正文

南科大C++ 第四章(数组,结构体,联合体,枚举)

数组

边界检测

C++中的数组不会进行边界检测,即可以使用类似-1这样的位置访问到超过数组管理范围的内存,这样容易引发错误。

二维数组

二维数组作为函数参数时可以可以只定义第二个维度即列,类似于可以不定义步数但要定义步长。

结构体

内存对齐

在结构体中不同的数据存放顺序结构体所占内存的大小也不一样
在这里插入图片描述
这是因为内存会对齐存放保证IO时读取的效率。

C与C++之间的差异

在C中结构体一定要加上struct
但C++中不一定
在这里插入图片描述

联合体

联合体与结构体不同,联合体中定义对象是对于同一块内存的不同访问方法:
在这里插入图片描述
大小由总和最大的数据访问方式定义

枚举

一种多个元素的集合
下面是一个与联合体,结构体一同使用的例子:

#include <iostream>
#include <cstdio>
#include <cstdint>
using namespace std;enum color {WHITE, BLACK, RED, GREEN, BLUE, YELLOW, NUM_COLORS};
enum datatype {TYPE_INT8=1, TYPE_INT16=2, TYPE_INT32=4, TYPE_INT64=8};struct Point{enum datatype type;union {std::int8_t data8[3];std::int16_t data16[3];std::int32_t data32[3];std::int64_t data64[3];};
};size_t datawidth(struct Point pt)
{return size_t(pt.type) * 3;
}int64_t l1norm(struct Point pt)
{int64_t result = 0;switch(pt.type){case (TYPE_INT8): result = abs(pt.data8[0]) + abs(pt.data8[1]) + abs(pt.data8[2]);break;case (TYPE_INT16): result = abs(pt.data16[0]) + abs(pt.data16[1]) + abs(pt.data16[2]);break;case (TYPE_INT32): result = abs(pt.data32[0]) + abs(pt.data32[1]) + abs(pt.data32[2]);break;case (TYPE_INT64): result = abs(pt.data64[0]) + abs(pt.data64[1]) + abs(pt.data64[2]);break;}return result;
}int main()
{enum color pen_color = RED;pen_color = color(3); //convert int to enumcout << "We have " << NUM_COLORS << " pens." << endl;//pen_color += 1; //error!int color_index = pen_color;color_index += 1;cout << "color_index = " << color_index << endl;//declaration and initializationstruct Point point1 = {.type=TYPE_INT8, .data8={-2,3,4}};struct Point point2 = {.type=TYPE_INT32, .data32={1,-2,3}};cout << "Data width = " << datawidth(point1) << endl;cout << "Data width = " << datawidth(point2) << endl;cout << "L1 norm = " << l1norm(point1) << endl;cout << "L1 norm = " << l1norm(point2) << endl;return 0;
}
http://www.dtcms.com/a/348772.html

相关文章:

  • odoo 工作台
  • Microsoft .NET Packages AIO:全面的.NET开发框架
  • 强光干扰下检出率↑93%!陌讯多模态融合算法在充电桩车位占用检测的实战解析
  • DDR3入门系列(一)——初识DDR3
  • FastAPI中定时任务的使用详解
  • Kernel Pwn 入门(五) 条件竞争 userfaultfd利用
  • PMP项目管理知识点-②项⽬环境
  • LeetCode 第464场周赛 第三天
  • 抽奖池项目测试
  • 【信息安全】英飞凌TC3xx安全调试口功能实现(调试口保护)
  • 解决Ubuntu22.04 安装vmware tools之后,不能实现文件复制粘贴和拖拽问题
  • AIStarter安装与调试:一键启动与收益中心教程
  • 为什么hive在处理数据时,有的累加是半累加数据
  • Codejock Suite ProActiveX COM Crack
  • C++如何将多个静态库编译成一个动态库
  • 【C++】 9. vector
  • golang3变量常量
  • 【golang长途旅行第30站】channel管道------解决线程竞争的好手
  • 在WSL2-Ubuntu中安装Anaconda、CUDA13.0、cuDNN9.12及PyTorch(含完整环境验证)
  • 深度学习与自动驾驶中的一些技术
  • 51c自动驾驶~合集18
  • 点评《JMeter核心技术、性能测试与性能分析》一书
  • 使用单个连接进行数据转发的设计
  • 大数据毕业设计选题推荐-基于大数据的北京市医保药品数据分析系统-Spark-Hadoop-Bigdata
  • 1688拍立淘接口数据全面解析详细说明(item_search_img)
  • Highcharts Maps/地图 :高性能的地理数据可视化方案
  • 打工人日报#20250824
  • CTFHub技能树 git泄露3道题练习--遇到没有master如何解决!!!
  • 一文掌握 Java 键盘输入:从入门到高阶(含完整示例与避坑指南)
  • 【大模型LLM学习】Research Agent学习笔记