数组的定义与越界问题

scanf标准读取函数

第一个冷知识,输入到scanf里面的内容都是字符串形式,但是! scanf(“%d”,&a),%d决定了如何对输入的字符串进行操作

scanf用来读取标准输入,标准输入的内容需要放入到某个变量空间中去,因此变量名必须要取地址。

scanf函数在读取整型数,浮点数,字符串都会忽略’\n’,’ '(换行符和空格),怎么忽略呢?

inti,j;
scanf("%d",&i);
scanf("%d",&j);
//输入第一个数字然后要敲一个换行符我们的换行符是无法被int型的数字匹配的所以只能忽略,类似的不是单个字符类型都会把他忽略。

多次读取的问题

int i;
int ret;//scanf()会返回匹配成功的个数
float j;
char c;
ret=scanf("%d%c%f",&i,&c,&j);
//如果输入123空格a空格123.0会出现错误,此时情况:i匹配123 c匹配空格,f无法匹配a,也无法忽略匹配成功两个
//如果解决??
scanf("%d %c %f",&i,&c,&j);//直接加一个空格最省事

数组

数组的定义

做个比喻高铁上面有很多位置,一节车厢里面的位置从1开始,数组可以看做是这个车厢,而数组元素可以看作是这个车厢里面的乘客,全部的乘客在车厢里,就类似数组的元素构成了数组本身这个概念。

定义的形式为:类型说明符 数组名[常量表达式]

例子:int a[4],float b[3-1]都是满足定义形式的。

声明数组的规则:

1.数组名命名符合变量名命名规则。

2.定义数组时必须指定数组中元素个数。比如高铁上面的位置数量不确定就没法让车厢拿出来使用

3.常量表达式中不可以出现变量值,即在初始化中无法对数据大小做动态定义,int n;a[n]这是不可以的。

数组的初始化

int b[5]={1,2,3,4,5};//直接声明数组大小然后赋值int b[]={1,2,3,4,5};//也可以不进行数组大小的声明,数组的长度是可以通过数组元素来确定的。int b[5]={0};//数组长度确定但是没有逐个赋值都默认为0元素

数组的易犯错误

数组的访问越界

访问越界是个什么东西呢??我们平时说你越界了,在这里值的是什么呢?我们可以想象一下一节高铁车厢有20个位置,但这时候我们买到了一个21号的位置,哪里来的21号位置??是不是不存在,他确实不存在,这时候乘务小姐姐穿着黑丝过来说到,这是我们系统的问题,21号位置对应的下一个车厢的第一个,而下个车厢的第一个是有人做的,此时你抢先他一步做到下一届车厢的第一个位置,用21的越界票做到了位置,这时候一号来了,问,这不是我的位置吗?你说购票系统出问题了,我越界到了你的位置,我代替了你,你去找乘务员反应吧哈哈哈。。。。。

这是一个不恰当的举例起码他没有反应先后的赋值的问题,后来的才是会占据该地址的。我们来看实际的操作把

int a[4]={1,2,3,4};
int j=0;
int k=0;
a[4]=5;
a[5]=6;
a[6]=5;
a[7]=6;
printf("%d",j);
printf("%d",k);

这时候会怎么样呢???这里应该都会说哪有a[4],a[5]吖到了a[3]就没了,我知道你很急但你先别急,这个就是越界的一个形象的例子,这种错误机器是不会检查的,毕竟数组就是一个接一个的地址,你直接按照地址去改完全没毛病,只不过这种操作会妨碍我们。

请看断点

在这里插入图片描述
a的地址就四个地址,没毛病,我们再来看下面几个地址
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


我们会发现在这里数组到了a[3]之后的地址也可以被找到的,虽然没有对a[3]之后的数组有定义,原理就是根据地址的操作,我们也可以看见a[6],a[7]的地址与jk重合了,所以对67的赋值就是对jk的重新赋值

总结

数组越界的情况就是这样的,但是聪明的你肯定一般没事不会这么写代码,但毕竟这个机制在这里所以我们就会害怕,万一越界了把什么变量的值给改了,整出什么幺蛾子我们都是负担不起了,所以这个情况一定要尽可能的去防范。

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

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

相关文章

Python数据分析案例34——IMDB电影评论情感分析(Transformer)

电影评论的情感分析 案例背景 很多同学对电影系列的数据都比较喜欢,那我就补充一下这个最经典的文本分类数据集,电影情感评论分析。用神经网络做。对国外的英文评论文本进行分类,看是正面还是负面情感。 数据集介绍 数据集:IMDb…

Python Tkinter Pack布局管理器

GUI 编程就相当于小孩子搭积木,每个积木块应该放在哪里,每个积木块显示为多大,也就是对大小和位置都需要进行管理,而布局管理器正是负责管理各组件的大小和位置的。此外,当用户调整了窗口的大小之后,布局管…

openssl3.2 - 官方demo学习 - pkey - EVP_PKEY_RSA_keygen.c

文章目录 openssl3.2 - 官方demo学习 - pkey - EVP_PKEY_RSA_keygen.c概述笔记END openssl3.2 - 官方demo学习 - pkey - EVP_PKEY_RSA_keygen.c 概述 官方指出 : RSA key 如果小于2048位, 就属于弱key 官方demo中, 给出的默认key长度为4096位 从名字生成上下文 初始化上下文…

sphinx,一个神奇的 Python 库!

更多资料获取 📚 个人网站:ipengtao.com 大家好,今天为大家分享一个神奇的 Python 库 - sphinx。 Github地址:https://github.com/sphinx-doc/sphinx/ 在软件开发和项目管理中,文档是不可或缺的一部分。好的文档可以…

【计算机二级考试C语言】C运算符

C 运算符 运算符是一种告诉编译器执行特定的数学或逻辑操作的符号。C 语言内置了丰富的运算符,并提供了以下类型的运算符: 算术运算符关系运算符逻辑运算符位运算符赋值运算符杂项运算符 本章将逐一介绍算术运算符、关系运算符、逻辑运算符、位运算符、…

企业工商年报在哪找?如何批量获取?

企业年报是什么?有什么用? 企业年报是企业每年必须向工商行政管理机关和税务机关报送的年度报告,是指公司整个会计年度的财务报告及其他相关文件。主要包括企业基本信息、资产负债表、利润表、现金流量表、股东及股本变化情况等内容。 作用…

SpringBoot集成p6spy

P6Spy 是一个可以用来在应用程序中拦截和修改数据操作语句的开源框架。 通过 P6Spy 我们可以对 SQL 语句进行拦截,相当于一个 SQL 语句的记录器,这样我们可以用它来作相关的分析,比如性能分析。这里主要用于在控制台打印SQL时能自动将问号替换成实际参数打印一个可执行的SQL…

SQL 语言详解

SQL 详解 我们通常可以将 SQL 分为四类,分别是 DDL(数据定义语言)、DML(数据操作语言)、DQL(数据查询语言)和 DCL(数据控制语言)。DDL 主要用于创建、删除、修改数据库中…

309.最佳买卖股票时机含冷冻期 714.买卖股票的最佳时机含手续费

309.最佳买卖股票时机含冷冻期 714.买卖股票的最佳时机含手续费 309.最佳买卖股票时机含冷冻期 力扣题目链接(opens new window) 给定一个整数数组,其中第 i 个元素代表了第 i 天的股票价格 。 设计一个算法计算出最大利润。在满足以下约束条件下,你…

云计算任务调度仿真04

这次分享一篇更加高级的云计算任务调度的文章和代码, 基于A3C学习和残差回归神经网络的随机边缘云计算环境动态调度 网络结构 结果 代码示例 这是基于pytorch实现的,所以复现起来没有什么难度,但是可以看到这有六层网络,而且…

KubeSphere 核心实战之一【在kubesphere平台上部署mysql】(实操篇 1/3)

文章目录 1、登录kubesphere平台2、kubesphere部署应用分析2.1、工作负载2.2、服务2.3、应用路由2.4、任务2.5、存储与配置2.6、部署应用三要素 3、部署mysql3.1、mysql容器启动实例3.2、mysql部署分析3.3、创建mysql的配置3.4、创建mysql的数据卷pvc3.5、创建mysql工作负载3.6…

java应用中swagger使用

文章目录 前言使用依赖引入配置注解使用controller中注解实体类注解 页面展示 前言 现在前后端分离式开发,最头疼的部分就是接口文档了。最讨厌两种人,一种是不写接口文档的人,另一种则是让我写接口文档的人。实际上,我们有一款特…

python/c++ Leetcode题解——20. 有效的括号

目录 题解 方法一:栈 复杂度分析 题解 方法一:栈 判断括号的有效性可以使用「栈」这一数据结构来解决。 我们遍历给定的字符串 s。当我们遇到一个左括号时,我们会期望在后续的遍历中,有一个相同类型的右括号将其闭合。由于后…

yolov5_obb win10环境安装

1、项目地址: GitHub - hukaixuan19970627/yolov5_obb: yolov5 csl_label.(Oriented Object Detection)(Rotation Detection)(Rotated BBox)基于yolov5的旋转目标检测yolov5 csl_label.(Oriented Object Detection)…

手机与电脑更改IP地址怎么使用代理IP?

在现代互联网时代,代理IP已成为许多人日常生活和工作中不可或缺的一部分。通过代理IP,用户可以隐藏自己的真实IP地址,并获得更好的网络体验。本文将详细介绍如何在手机和电脑上更改IP地址并使用代理IP。 一、手机使用代理IP 1. 打开手机设置&…

微服务接口工具Swagger2

##1、什么是Swagger? # 官网 https://swagger.io/核心功能 生成接口说明文档生成接口测试工具 2、SpringBoot集成Swagger2 1&#xff09;、添加依赖 <!-- swagger2 --><!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger2 --><depen…

XGBoost系列1——XGBoost简介与入门

写在开头 XGBoost&#xff08;eXtreme Gradient Boosting&#xff09;是一种被广泛使用的机器学习算法&#xff0c;由陈天奇博士于2014年提出&#xff0c;以其卓越的性能在数据科学竞赛中备受瞩目。本篇博客将深入探讨XGBoost&#xff0c;从其背景和发展、优势和特点开始&…

[WUSTCTF2020]alison_likes_jojo 1

BUUCTF:https://buuoj.cn/challenges 题目描述&#xff1a; 得到的 flag 请包上 flag{} 提交。 感谢 Iven Huang 师傅供题。 比赛平台&#xff1a;https://ctfgame.w-ais.cn/ 密文&#xff1a; 下载附件解压&#xff0c;得到两张jpg图片和一个文本文件。 解题思路&#x…

[DL]深度学习_Feature Pyramid Network

FPN结构详解 目录 一、概念介绍 二、结构详解 1、对比试验 2、特征图融合 3、结构详解 4、不同尺度预测 5、Proposal映射到预测特征层 一、概念介绍 Feature Pyramid Network (FPN)是一种用于目标检测和语义分割的神经网络架构。它的目标是解决在处理不同尺度的图像时…

使用Visual Leak Detector排查内存泄漏

目录 1、VLD工具概述 2、下载、安装VLD 2.1、下载VLD 2.2、安装VLD 3、VLD安装目录及文件说明