数组越界的后果

数组:

什么是数组:变量的组合,是一种批量定义变量的方式。
定义:类型 数组名[数量];int arr[5];
使用:数组名[下标];下标:从零开始,范围:0~数量-1。
遍历:与for循环配合,使用循环变量i当作数组的下标。
初始化:类型 数组名[数量] = {1,2,3,4,5,...};1、数组与普通变量一样默认值是随机的,为了安全要对进行初始化。2、这种初始化语法只能在定义数组时使用,而且必须使用常量初始化。3、初始化数据过多,编译器会丢弃并产生警告。4、初始化数据不够,编译器则会补0。5、初始化数组时长度可以省略,编译器会自动统计数据的个数然后告诉数组。sizeof(arr)/sizeof(arr[0]) = 数组的长度

练习1:定义一个长度为10的数组并初始化,计算出最大值,最小值以及平均值。

#include <stdio.h>int main(int argc,const char* argv[])
{int arr[10] = {1,9,0,7,6,5,3,4,8,2};int max = arr[0] , min = arr[0];float sum = arr[0];for(int i=1; i<10; i++){if(arr[i] > max){max = arr[i];}if(arr[i] < min){min = arr[i];}sum += arr[i];}printf("%d %d %g\n",min,max,sum/10);}

练习2:定义一个长度为10的数组并初始化,进行升序排序。
for(int i=0; i<x-1; i++)
{
for(int j=i+1; j<x; j++)
{
if(i < j)
{
swap i j;
}
}
}

#include <stdio.h>int main(int argc,const char* argv[])
{int arr[10] = {1,9,0,7,6,5,3,4,8,2};for(int i=0; i<9; i++){for(int j=i+1; j<10; j++){if(arr[i] > arr[j]){int t = arr[i];arr[i] = arr[j];arr[j] = t;}}}for(int i=0; i<10; i++){printf("%d ",arr[i]);}
}

数组越界

越界:为了程序的运算效率是不会检查数组的下标。
数组越界的后果:
1、一切正常。
2、段错误
3、脏数据

练习3:定义一个长度为10的数组并初始化,找出数组中第二个大的值。

#include <stdio.h>int main(int argc,const char* argv[])
{int arr[10] = {20,19,0,7,6,5,3,4,38,2};int max = arr[0]>arr[1]?arr[0]:arr[1];int max2 = arr[0]>arr[1]?arr[1]:arr[0];for(int i=2; i<10; i++){if(arr[i] > max){max2 = max;max = arr[i];}else if(arr[i] > max2){max2 = arr[i];}}printf("%d %d\n",max,max2);
}

二维数组:

一维数组相当于把变量排成一排,通过编号访问。
二维数组相当于把变量排成矩阵,通过行号和列号访问。
定义:类型 数组名[行数][列数];int arr[3][5];[0,0][0,1][0,2][0,3][0,4][1,0][1,1][1,2][1,3][1,4][2,0][2,1][2,2][2,3][2,4]
使用:数组名[行下标][列下标]行下标:0 ~ 行数-1列下标:0 ~ 列数-1
遍历:需要与双层for循环配合,外层循环负责遍历行,内层循环负责遍历列。for(int i=0; i<3; i++){for(int j=0; j<5; j++){printf("%d ",arr[i][j]);}printf("\n");}
初始化:类型 数组名[行数][列数] = {{第一行},{第二行},{第三行}};

练习4、定义一个5*5的数组,找出其中的最小值下标,计算周的和是多少。

#include <stdio.h>int main(int argc,const char* argv[])
{int arr[5][5] = {{-1,3,5,7,9},{0,2,4,6,8},{1,2,13,4,5},{6,7,8,9,0},{4,5,6,7,8}};	int min_x = 0 , min_y = 0;for(int i=0; i<5; i++){for(int j=0; j<5; j++){if(arr[i][j] < arr[min_x][min_y]){min_x = i;min_y = j;}}}int sum = 0;min_x>0 && (sum+=arr[min_x-1][min_y]); // 上min_x<4 && (sum+=arr[min_x+1][min_y]); // 下min_y>0 && (sum+=arr[min_x][min_y-1]); // 左min_y<4 && (sum+=arr[min_x][min_y+1]); // 右min_x>0 && min_y>0 && (sum+=arr[min_x-1][min_y-1]); // 左上min_x>0 && min_y<4 && (sum+=arr[min_x-1][min_y+1]); // 右上min_x<4 && min_y>0 && (sum+=arr[min_x+1][min_y-1]); // 左下min_x<4 && min_y<4 && (sum+=arr[min_x+1][min_y+1]); // 右下printf("sum=%d\n",sum);
}

变长数组:

定义数组时使用变量当作它长度,在代码编译期间数组的度是不确定的,当执行到数组的定义语句时它的长度才家有确定下来,一旦确定就无法更改了。优点:可以根据实际情况来确定数组长度达到节约内存目的。
缺点:不可以初始化
#include <stdio.h>int main(int argc,const char* argv[])
{int n = 0;// 数组长度可以 变化printf("请输入数组的长度:");scanf("%d",&n);int arr[n] = {};printf("%d\n",sizeof(arr)/sizeof(arr[0]));
}

练习5:显示N层杨辉三角形。
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1

#include <stdio.h>int main(int argc,const char* argv[])
{int n = 0;printf("请输入n的值:");scanf("%d",&n);int arr[n][n];for(int l=0; l<n; l++){arr[l][0] = 1;arr[l][l] = 1;for(int c = 1; c<l; c++){arr[l][c] = arr[l-1][c]+arr[l-1][c-1];}}for(int i=0; i<n; i++){for(int j=0; j<=i; j++){printf("%d ",arr[i][j]);}printf("\n");}
}

下期:

进制转换、原反补
函数
类型限制:const static volatile register extern
指针
字符串
堆内存管理


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

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

相关文章

职场心理:12个建议或许能改变你的一生(图)

心理引言&#xff1a;如何更好实现自我的职业目标&#xff1f;听起来很简单&#xff0c;回答也很简短&#xff0c;就是你必须清楚你最终想要实现什么&#xff1f;只要你这样做&#xff0c;你就已经开始从看的见和看不见的两条路径来实现你的目标。职场是一种特殊的环境&#xf…

python—包

1.模块 可以增加代码的重复利用的方式 避免命名冲突 如何定义模块 模块就是一个普通文件&#xff0c;所以任何代码可以直接书写规范 函数&#xff08;单一的功能&#xff09;类&#xff08;相似功能的组合&#xff0c;或者类似业务模块&#xff09;测试代码 如何使用模块 模块…

Docker Installation : Docker 中安装并启动 Kong

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 Details about how to use Kong in Docker can be found on the DockerHub repository hosting the image: kong. We also have a Docke…

tomcat是否有必要配置环境变量(摘)

之前发表了一篇关于如何安装和配置Tomcat的文章&#xff0c;而最近在开发项目的时候总是报错。后来被公司的大神问了一句&#xff1a;是谁告诉你Tomcat是需要配置环境变量的&#xff1f; 作为新手的我瞬间整个人都不好了&#xff01;于是偷偷百度了一下&#xff0c;终于找到了关…

走迷宫+推箱子

两个小游戏的大致逻辑 走迷宫: 1、定义二维字符数组作为迷宫 2、定义变量记录老鼠的位置 3、获取游戏开始时间 3、进入循环 1、清理屏幕&#xff0c;使用system调用系统命令。 2、显示迷宫(遍历二维字符数组) 3、检查是否到达出口 获取游戏结束时间&#xff0c;计算出走出迷宫用…

Facebook开源ptr:在Python环境中并行运行单元测试

Facebook开源了一个名为Python Test Runner&#xff08;ptr&#xff09;的新项目&#xff0c;允许开发人员运行Python单元测试套件。ptr和现有测试运行器之间的主要区别在于ptr通过爬取存储库查找一定的Python项目&#xff0c;这些项目带有的单元测试在安装文件中已经定义过。 …

小窍门解决大问题(组图)

1.洗头时&#xff0c;在水中放少许盐&#xff0c;也可以预防脱发。 2.用醋洗头&#xff0c;可以令头发飘顺&#xff0c;容易打理而且兼有去头皮屑的功效。特别适合烫染后的头发。 3.刷牙时在牙膏上加上一点小苏打&#xff0c;刷三次后牙齿洁白如玉&#xff0c;牙锈自然脱落…

解决报错: Connecting to Kong on http ... Could not reach Kong on http://xxx.xxx.xxx.xxx:8001

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1. Docker 中安装并启动好网关 kong 后&#xff0c;想要安装 kong 的图形化界面 kong-dashboard &#xff0c;运行命令&#xff1a; do…

生成迷宫/C++

小时候&#xff0c;都喜欢玩迷宫&#xff0c;现在的电脑上还可以玩3D类迷宫。 那么每次开始游戏时&#xff0c;迷宫里密密麻麻的道路是怎么生成的呢&#xff1f; 在代码里面&#xff0c;我们把它们想象成一堆像素小格子&#xff0c;当两个格子连在一起&#xff0c;就像一堵墙&a…

Spring boot 配置tomcat后 控制台不打印SQL日志

在pom.xml中配置tomcat启动处加上&#xff1a; <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><exclusions><exclusion><groupId>org.springframework.boot</…

人生有五不:不等、不管、不看、不做、不给

一、我不等 朋友什么都等&#xff1a;等退休、等一千万存款、等孩子长大、等房贷缴清……最后等到了告别式。 他有感而发告诉我们这群探病友人&#xff0c;人都会走&#xff0c;可是他走得有些遗憾&#xff0c;有点不甘&#xff0c;非常后悔&#xff0c;除了工作之外&#xff0…

selenium操作浏览器的前进和后退

前进关键字&#xff1a;driver.forward() 后退关键字&#xff1a;driver.back() 测试对象&#xff1a;1、https://www.baidu.com/ 2、https://www.sogou.com/ 实例代码&#xff1a; 1 # 导入测试所需的库或者模块2 from selenium import webdriver3 import unittest4 import ti…

关于对象不能直接访问私有成员的误区(转)

先贴代码&#xff1a; #includeusing namespace std; class CPoint { public:CPoint(int xx, int yy){x xx;y yy;}CPoint(const CPoint &p){x p.x;y p.y;} private:int x, y; };如果你在想为什么拷贝构造函数的参数可以直接去访问它自己的私有成员的话&#xff0c;你就…

阿里云 ECS服务器 开放 8080 端口 -- 图解

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 由于 kong-dashboard 的端口是映射到 8080 的&#xff0c;服务已启动成功却一直访问不了&#xff0c;最后才想起端口没有开放 ... 1. 登…

.NET高级代码审计(第三课)Fastjson反序列化漏洞

0X00 前言 Java中的Fastjson曾经爆出了多个反序列化漏洞和Bypass版本&#xff0c;而在.Net领域也有一个Fastjson的库&#xff0c;作者官宣这是一个读写Json效率最高的的.Net 组件&#xff0c;使用内置方法JSON.ToJSON可以快速序列化.Net对象。让你轻松实现.Net中所有类型(对象,…

IDEA:No SLF4J providers were found.

如果您是用IDEA 的 maven 写的 将slf4j的导入包 更改 为下列代码 <dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.8.0-beta2</version></dependency><dependency><groupId&…

【C++基础】时间类型详解(转)

Unix时间戳(Unix timestamp)&#xff0c;或称Unix时间(Unix time)、POSIX时间(POSIX time)&#xff0c;是一种时间表示方式&#xff0c;定义为从格林威治时间1970年01月01日00时00分00秒起至现在的总秒数。Unix时间戳不仅被使用在Unix 系统、类Unix系统中&#xff0c;也在许多其…

没变强是因为你太舒服(图)

职业生涯很长&#xff0c;对企业而言&#xff0c;它需要你成为一个专才&#xff0c;但从职业发展来看&#xff0c;你需要成为一个全才&#xff0c;方能适应社会的变化。 阻碍你成为全才的不良习惯有很多&#xff0c;有时候我们喜欢趋利避害&#xff0c;拖延症更是让自己定下来…

解决:DuplicateMappingException: Table [xx] contains physical column name referred to by multiple ... .

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 报错如题&#xff1a; Caused by: org.hibernate.DuplicateMappingException: Table [xxx] contains physical column name [comment] …

0323表格学习

上午早来复习了一会昨天的课程。今天主要学习了表格的标签写法&#xff0c;难度不大&#xff0c;但是合并行与合并列容易混淆搞不明白。 <!--有序列表--> <ol type"I"> <li>数学</li> <li>英语</li> &l…