用幻灯片讲解C++中的C语言风格数组

用幻灯片讲解C++中的C语言风格数组

1.栈内存中的C风格数组

  • 糟糕的可用性,但你将在遗留代码中看到它们。
  • 相同类型的对象块。
  • 大小必须是常量表达式。
  • 第一个元素的索引为0,即数组索引从0开始。
    注意一下数组的初始化,使用了C++11标准之后的统一初始化,即用花括号初始化变量的方法。
    在这里插入图片描述

2.C风格数组的指针

更奇怪的是:数组标识符退化为指向第一个元素的指针。
这句话啥意思呢,以下图为例,数组numbers的标识符是numbers,可以单独使用它,使用它时,它退化成了此数组第一个元素的指针。
即:numbers = &numbers[0]
在这里插入图片描述

3.数组存取

给数组元素赋值的两种方法。
在这里插入图片描述

4.堆内存中的C风格数组

  • 相同类型的对象块。
  • 数组大小可以在运行时设定。
    第一点和栈内存数组一致,就是说所有元素类型必须一致。第二点和栈内存数组不同,在栈中数组的大小是常量表达式也就是在编译时就确定的,而堆中的数组是可以在程序运行时动态设定的。比如下图的数组个数是3,也可以是其它大小或大于0的整形表达式、变量等。make_unique模板函数是创建一个现代C++使用的唯一型智能指针。
    在这里插入图片描述

5.向函数传递C风格数组

  • 数组标识符退化为指向第一个元素的指针
  • 问题:我们怎么知道数组的大小?
    注意:你是用double* x传递数组参数,还是用double x[]传递数组参数,两者没有不同实际都是退化为指针传递。
    在这里插入图片描述
    要知道向函数传递的数组参数的大小,C语言的典型的解决方法是再传递一个数组大小参数。
    在这里插入图片描述

6.用STL库的copy算法复制数组

一种是使用数组索引复制,一种是使用迭代器复制。
使用迭代器的好处是:你不用关心数组的大小,只作用于数组标识符本身(而不是指针)!
在这里插入图片描述
在这里插入图片描述

7.为什么要避免C风格数组

  • 不可深拷贝、可分配。(意思是,C风格数组标识符赋值给变量只是赋值了指针而无法进行深拷贝赋值,可分配的意思是在堆中创建C风格数组使用指针变量方式指向数组,指针变量是可以被再使用分配别的内存的,这时如果原内存没有释放则会造成内存泄漏。)
  • “退化”为指向第一个元素的指针。
  • 数组自己不知道大小。
  • 传递给函数不安全。在这里插入图片描述

8.C语言风格的字符串

  • C风格的字符串是字符型的数组。
  • 字符串数组以’\0’字符作为结束,“\0”字符的值为0。
  • 字符串文本(字面值)"xyz"的类型是char const [ ] (只读字符串数组)
    在这里插入图片描述
    原文链接 原文

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

回溯算法 -- 77. 组合

目录 一.题目描述 二.解题思路 三.回溯三部曲 3.1确定递归函数的返回值以及参数 3.2回溯算法的终止条件 3.3确定单层循环搜索逻辑 四.具体的代码 一.题目描述 给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按 任何顺序 返回答案…

软件开发整体介绍

黑马程序员瑞吉外卖 文章目录 一、软件开发流程二、角色分工三、软件环境 一、软件开发流程 二、角色分工 三、软件环境

MySQL—函数—流程控制函数(基础)

一、引言 接下来,我们就进入函数的最后一个部分:流程函数。而流程控制函数在我们的日常开发过程是很有用的。 流程控制函数在我们 sql 语句当中,经常用来实现条件的筛选,从而提高语句的一个执行效率。 我们主要介绍以下4个流程控…

第十五课,海龟画图:抬笔与落笔函数、画曲线函数

一,turtle.penup()和turtle.pendown():抬起与落下画笔函数 当使用上节课学习的这个turtle.forward():画笔前进函数时,画笔会朝着当前方向在画布上留下一条指定(像素)长度的直线,但你可能发现&a…

自动微分技术在 AI for science 中的应用

本文简记我在学习自动微分相关技术时遇到的知识点。 反向传播和自动微分 以 NN 为代表的深度学习技术展现出了强大的参数拟合能力,人们通过堆叠固定的 layer 就能轻松设计出满足要求的参数拟合器。 例如,大部分图神经网络均基于消息传递的架构。在推理…

政安晨【零基础玩转各类开源AI项目】:解析开源项目的论文:Physical Non-inertial Poser (PNP)

政安晨的个人主页:政安晨 欢迎 👍点赞✍评论⭐收藏 收录专栏: 零基础玩转各类开源AI项目 希望政安晨的博客能够对您有所裨益,如有不足之处,欢迎在评论区提出指正! 本文解析的原始论文为:https://arxiv.org/…

有容微ASW3642 HDMI或者DP双向切换器,二进一出,一进二出支持4K60HZ分辨率

ASW3642描述: ASW3642 是一款 12 通道 1:2 或 2:1 双向多路复 用器/ 多路解复用器。 ASW3642 可由 2.6V 至 4.5V 的电源供电,适用于电池供电的应用。该器 件的导通电阻(R ON )较低并且 I/O 电容较小, 能…

Nginx配置详细解释:(1)全局配置

自启动安装nginx:前面博客有解释 systemctl stop firewalld setenforce 0 [rootNode1 ~]#:mkdir /data [rootNode1 ~]#:cd /data [rootNode1 data]#:yum -y install gcc pcre-devel openssl-devel zlib-devel openssl openssl-devel [rootNode1 data]#:wget http://nginx.o…

JMeter工具介绍

Jmeter功能概要 JDK常用文件目录介绍 Bin目录:存放可执行文件和配置文件 Docs目录:是Jmeter的API文档,用于开发扩展组件 printable_docs目录:用户帮助手册 lib目录:存放JMeter依赖的jar包和用户扩展所依赖的Jar包 修…

linux mtd分区应用操作sample之某分区擦除

什么是擦除? 把flash相关的区域数据bit置为1的过程 #include <mtd/mtd-user.h> #include <mtd/mtd-abi.h> struct erase_info_user {__u32 start; // 起点 __u32 length; //长度 块大小对齐 不然报参数失败 };struct erase_info_user64 {__u64 sta…

wandb安装与使用 —— 用于跟踪、可视化和协作机器学习实验的工具

文章目录 一、wandb简介二、wandb注册与登陆&#xff08;网页&#xff09; —— 若登录&#xff0c;则支持在线功能三、wandb安装与登陆&#xff08;命令行&#xff09; —— 若不登录&#xff0c;则只保留离线功能四、函数详解4.1、wandb.init() —— 初始化一个新的 wandb 实…

Vivado的两种下载安装方式:Webpack下载与安装、本地文件安装详细步骤讲解

目录 1.前言2. Vivado Webpack下载、安装3.本地文件下载安装 微信公众号获取更多FPGA相关源码&#xff1a; 1.前言 本人自本科大二开始接触FPGA相关知识&#xff0c;现已将近六年&#xff0c;由于一直在上学&#xff0c;也不是一直在搞FPGA&#xff0c;但是也完成过一些项目…

【线性表】顺序存储和链式存储的实现

文章目录 顺序存储链式存储单向链表循环链表 线性表的定义 (1)概念定义&#xff1a;用数据元素的有限序列表示叫做线性表&#xff1b;线性表中数据元素的类型可以为简单类型&#xff0c;也可以为复杂类型。许多实际应用问题所涉的基本操作有很大相似性&#xff0c;不应为每个具…

Day02 设计首页导航条

设计首页导航条 导航条的样式&#xff0c;主要是从Material DesignThemes UI 拷贝过来修改的,项目用了这个UI组件库。就看项目需要什么&#xff0c;就去源码拷过来使用。 直接下载源码&#xff0c;编译运行就可以看到Demo 了 下载后且正常编译成功了&#xff0c;是能正常跑起来…

如何使用Python绘制出好看的小提琴图、箱形图、散点图、山脊图和柱状图

如何使用Python绘制出好看的小提琴图、箱形图、散点图、山脊图和柱状图 废话不多说&#xff0c;今天给大家分享一个&#xff0c;使用python绘制小提琴图、箱形图、散点图、山脊图和柱状图等等 图中的数据是随机生成的&#xff0c;图例&#xff0c;图注以及坐标题目各种信息&a…

javascript之对象属性配置

属性标志&#xff1a; 介绍&#xff1a; 对象属性&#xff0c;除 value 外&#xff0c;还有三个特殊的特性&#xff0c;也就是所谓的“标志”&#xff1a; 属性truefalsewritable值可以被修改只可读的enumerable被在循环中列出不会被列出configurable此属性可以被删除/修改 不可…

从头开始构建GPT标记器

从头开始构建GPT标记器 对于GPT Tokenizer&#xff0c;论文《Language Models are Unsupervised Multitask Learners》中介绍了一种字节级编码作为LLM的标记化机制&#xff1a; The vocabulary is expanded to 50,257. We also increase the context size from 512 to 1024 to…

python3.8环境下安装pyqt5

1.实验目的 测试python可视化工具包pyqt5,为后期做系统前端页面做铺垫 2.实验环境 1.软件 anaconda2.5 pycharm2024.1.1 pyqt5 2.硬件 GPU 4070TI Intel I7 1400K 3. 安装步骤 (base) C:\Users\PC>conda -V conda 23.7.4(base) C:\Users\PC>conda create qttest p…

基于卷积-小波神经网络的SAR图像海冰变化检测方法(MATLAB R2018A)

海冰是冰冻圈的重要组成部分&#xff0c;海冰的变化信息对航行安全和自然资源开采等非常重要&#xff0c;许多船舶没有加固防冰设备&#xff0c;因此&#xff0c;必须避开所有的冰区。尤其当冰压很高时&#xff0c;即使破冰船也很难在冰层中前行。为了安全航行&#xff0c;获取…

ctfshow-web入门-爆破(web21-web24)

目录 1、web21 2、web22 3、web23 4、web24 1、web21 爆破什么的&#xff0c;都是基操 需要认证才能访问 随便输一个用户名和密码抓包看看&#xff1a; 多出来一个认证的头 Authorization: Basic YWRtaW46MTIzNDU2 base64 解码看看&#xff1a; 就是我们刚才输入的用于测…