首页 > 其他分享 >17.数组_二维数组和数组越界

17.数组_二维数组和数组越界

时间:2024-12-18 18:55:46浏览次数:12  
标签:arr 17 int 越界 ++ 二维 数组

2.二维数组的创建和初始化

  2.1二维1数组的创建

//数组创建

int arr[3][4];

char arr[3][5];

double arr[2][4];

  2.2二维数组的初始化

//数组的初始化

int arr[3][4] = {1,2,3,4};

int arr[3][4] = {{1,2},{4,5}};

int arr[ ][4] = {{2,3},{4,5}};//二维数组如果有初始化,行可以省略,列不能省略。

2.3二维数组的使用

二维数组的使用也是通过下标的方式。

看代码:

#include<stdio.h>
int main()
{
	int arr[3][4] = { 0 };
	int i = 0;
	for (i = 0;i < 3;i++)
	{
		int j = 0;
		for (j = 0;j < 4;j++)
		{
			arr[i][j] = i * 4 + j;
		}
	}
	for (i = 0;i < 3;i++)
	{
		int j = 0;
		for (j = 0;j < 4;j++)
		{
			printf("%d ", arr[i][j]);
		}
	}
	return 0;
}

2.4二维数组在内存中的存储

像一维数组一样,这里我们尝试打印二维数组的每个元素。

#include<stdio.h>
int main()
{
	int arr[3][4];
	int i = 0;
	for (i = 0;i < 3;i++)
	{
		int j = 0;
		for (j = 0;j < 4;j++)
		{
			printf("&arr[%d][%d] = %p\n", i, j, &arr[i][j]);
		}
	}
	return 0;
}

3.数组越界

数组的下标是有范围限制的。

数组的下规定是从0开始的,如果数组有n个元素,最后一个元素的下标就是n-1.

所以数组的下标如果小于0,或者大于n-1,就是数组越界访问了,超出了数组合法空间的访问。

c语言本身是不做数组下标的越界检查,编译器也不一定报错,但是编译器不报错,并不意味着程序就是正确的,所以程序员写代码时,最好自己做越界的检查。

#include<stdio.h>
int main()
{
	int arr[10] = { 1,2,3.4,5,6,7,8,9,10 };
	int i = 0;
	for (i = 0;i <= 10;i++)
	{
		printf("%d\n", arr[i]);//当i等于10的时候,越界访问了
	}
	return 0;
}

二维数组的行和列也可能存在越界。

标签:arr,17,int,越界,++,二维,数组
From: https://blog.csdn.net/a12sj_/article/details/144526764

相关文章

  • 12.17 CW 模拟赛 赛时记录
    前言这一次又来更新比赛策略讲真打了这么久,还没有一个好的比赛策略真的是抽象回去吃点感冒药看题怎么\(\rm{T1\T2}\)是一个题\(\rm{T1}\)可能是\(\rm{dp}\)题\(\rm{T3}\)有些不好做\(\rm{T4}\)这种题一般都不会做,能骗多少是多少\(\rm{T1}\)思路转化题意......
  • 【C语言】冒泡法从大到小排列,数组
    下面是一个使用冒泡排序法对10个整数进行由大到小排序的完整C语言示例程序。程序中定义了一个数组a来存放这10个整数,并使用嵌套循环实现冒泡排序的逻辑。voidbubbleSortDescending(intarr[],intn){for(inti=0;i<n-1;i++){for(intj=0;......
  • 12.17
    实验4NoSQL和关系数据库的操作比较 1.实验目的(1)理解四种数据库(MySQL、HBase、Redis和MongoDB)的概念以及不同点;(2)熟练使用四种数据库操作常用的Shell命令;(3)熟悉四种数据库操作常用的JavaAPI。2.实验平台(1)操作系统:Linux(建议Ubuntu16.04或Ubuntu18.04);(2)Hadoop版本:3.1.3;(3)My......
  • C语言数组和字符数组和字符串详解
    数组的概念和定义我们知道,要想把数据放入内存,必须先要分配内存空间。放入4个整数,就得分配4个int类型的内存空间:inta[4];这样,就在内存中分配了4个int类型的内存空间,共4×4=16个字节,并为它们起了一个名字,叫a。我们把这样的一组数据的集合称为数组(Array),它所包含的每一个数据叫......
  • 和为 K 的子数组
    给你一个整数数组 nums 和一个整数 k ,请你统计并返回 该数组中和为 k 的子数组的个数 。子数组是数组中元素的连续非空序列。 示例1:输入:nums=[1,1,1],k=2输出:2示例2:输入:nums=[1,2,3],k=3输出:2思路:前缀和+哈希表优化 classSolution{public......
  • 在21世纪的我用C语言探寻世界本质——柔性数组
    人无完人,持之以恒,方能见真我!!!共同进步!!文章目录一、什么是柔性数组二、柔性数组的特点三、柔性数组的使用四、柔性数组的优势一、什么是柔性数组也许你从来没有听说过柔性数组(flexiblearray)这个概念,但是它确实是存在的。在C99标准中,如果结构体的最后一个成员是数......
  • 26. 删除有序数组中的重复项
    题目链接解题思路:保证一个有效区,当发现一个「新数」时,就扩大有效区。怎么判断是否是一个新数?来到一个i位置,往左边看,如果相等,则i++,一直到不想等为止。为什么可以这样?因为是有序的。代码classSolution{public:intremoveDuplicates(vector<int>&nums){......
  • 17. 电话号码的字母组合
    题目链接解题思路:一个简单的回溯题目。代码classSolution{public:map<char,string>table{{'2',"abc"},{'3',"def"},{'4',"ghi"},{'5',"jkl"},{'6',"......
  • 2024-12-18:正方形中的最多点数。用go语言,给定一个二维数组 points 和一个字符串 s,其中
    2024-12-18:正方形中的最多点数。用go语言,给定一个二维数组points和一个字符串s,其中points[i]表示第i个点的坐标,s[i]表示第i个点的标签。如果一个正方形的中心在(0,0),边与坐标轴平行,并且内部没有标签相同的两个点,则称这个正方形为“合法”的。你的任务是返回可以被“合......
  • 发点牢骚(20241217)
    我个人表示不要把一些东西发在一些论坛,社区和公开区域。(尤其是NGA)最近部分平台有了挖坟挂人的征兆,这使得我感觉“沟通成本”太高了,因为总有傻X喜欢开天眼,喜欢以现在的角度强行评价过去的事,你们天天发个帖子评价啥东西的过去,你能回到2000年吗?回不到就别提了。我一直认为讨论历......