一维数组和二维数组(代码片段)

author author     2022-12-06     135

关键词:

数组

一维数组的创建与初始化

数组的创建

数组的概念:一组具有相同类型元素的集合。 创建的方式:数组的元素类型 数组名称 指定数组的大小

例 : int arr[10]:创建了一个具有10个整形类型的数组。 char arr[10]:创建了一个包含有10个字符类型的数组; 方框内的数字必须是常量,不能是变量 例:

int n=0;
char arr[n]

这种写法是错误的;

数组的初始化

数组的初始化是指在创建数组的同时给数组的内容进行一些合理的初始化值。 例如:

int arr[10]=1,2,3,4,5,6;//不完全初始化,其余未进行初始化的4个元素为0;
int arr[4]=1,2,3,4//完全初始化。
char arr[10]=1,2,3,4//这是对字符型数组的不完全初始化,其余的6个元素默认为0;
char arr[4]=1,2,3,4//这是对字符型数组的完全初始化。
char arr[4]="1","2"//这种不完全初始化的方式也是允许的;这种一个一个赋值初始化的方式
//结尾没有\\0.
//另外,对于字符型数组的初始化还有其他方式,例如:
char arr[4]="ab";//这时前两个元素分别为a,b,后面的两个数字一个是由于字符窜结束放入
//的‘\\0,虽然其在监视中看到的依然是0,但他不是默认的0,最后一个数就是默认的0.

有时也可以不指定元素的个数,但是必须对数组即进行完全初始化,让系统自动的计算出语速的个数。 int arr[]=0; 这种写法是错误的,相当于既没有声明元素的个数,也没有进行初始化。 当然,也可以不给数组指定元素的个数,但必须进行数组的初始化,系统会自动计算元素的个数。由于字符窜总是以‘\\0’进行结尾,所以元素的个数总比输入字符的数目多一。 在计算字符窜的长度时,我们经常用到strlen和sizeof 这里要强调的是,sizeof计算的是数组空间的大小,他包含\\0,如果进行不完全初始化,用sizeof计算出的结果还是在初始化数组时[]中填入的数字。 另外,strlen函数计算的是\\0之前的字符窜的长度,就是我们能看到的字符的数量。计算时不包括\\0. 两者没有任何关系。 strlen:是求字符窜长度,只能针对字符窜长度,并且他是库函数,要应用头文件。 sizeof:计算变量,数组,类型的大小,单位是字节,他是一个操作符。 利用这个程序来测试一下自己是否理解

#include<stdio.h>
#include<string.h>
int main()

	char arr1[] =  a,b,c ;
	char arr2[] = "abc";
	printf("%d\\n", sizeof(arr1));
	printf("%d\\n", sizeof(arr2));
	printf("%d\\n", strlen(arr1));//这个不是字符窜,而strlen函数只针对\\0/之前的字符窜,运行给出的数字是一个随机值,
	printf("%d\\n", strlen(arr2));
	return 0;


数组的使用

[]:下标引用操作符,用来进行数组的访问。 数组的下标从0开始,依次往后增大。对数组的访问采用 数组名[下标];

#include<stdio.h>
int main()

	int arr[4] =  1,2,3,4 ;
	int a = arr[3];
	printf("%d\\n", a);
	return 0;


对整个数组进行打印,可以利用***循环***的方式

#include<stdio.h>
int main()

	int arr[4] =  1,2,3,4 ;
	for (int i = 0; i < 4; i++)
	
		printf("%d ", arr[i]);
	
	return 0;


#include<stdio.h>

int main()

	int arr[] =  1,2,3,4,5,6,7,8,9,0 ;
	int ch = sizeof(arr) / sizeof(arr[0]);
	for (int i = 0; i < ch; i++)
	
		printf("%d ", arr[i]);
	

	return 0;


数组是通过下标来访问的,下标是从0开始的; 数组的大小是可以通过计算得到的

数组在内存中的布局

我们用查看地址的方式来看一下数组在内存中是如何存放的;

#include<stdio.h>

int main()

	int* a;
	int arr[] =  1,2,3,4,5,6,7,8,9,0 ;
	int ch = sizeof(arr) / sizeof(arr[0]);
	for (int i = 0; i < ch; i++)
	
		a = &arr[i];
		printf("%p ", a);//打印地址用%p
	

	return 0;


可以发现,相邻两个地址之间差4; 表明 数组的存放方式是在内存中开辟一块空间,并把数字按顺序存放。

二维数组的创建与初始化

实际上,二维数组是一个平面的x-y坐标系。

二维数组的初始化

int arr[行][列] :几行几列的整形元素 int arr[3][4]:这代表一个3行4列的一个二维数组 int arr[3][4]=1,2,3,4,5,6,7 先从第一行开始排序,排完后从第二行的第一个元素继续排序。 int arr[3][4]=1,2,3,4,5,6,7 这样可以分别对每一行的数赋值到你想要的元素,其余未进行赋值的默认为0;上面的数组也同样; 还有一种省略行数的的初始化方式,这种方式必须进行完全初始化,这样系统会自动计算出行数。 int arr[][4]=1,2,3,4,5,6,7,8; 很明显,行数为3行。

二位数组的使用

对二位数组的使用仍然用下标来访问,。行和列都是从0开始的。

打印二维数组,采用双重循环的方式

#include<stdio.h>
int main()

	int arr[3][4] =  1,2,3,4,1,2,3 ;
	int i = 0;
	int j = 0;
	for (i = 0; i < 3; i++)//控制行数
	
		for (j = 0; j < 4; j++)//控制列数
		
			printf("%d ", arr[i][j]);
		
		printf("\\n");
	



###二位数组在内存中的存放方式

#include<stdio.h>
int main()

	int arr[4][3] =  1,2,3,4,5,6,7,8,9 ;
	int i = 0;
	int j = 0;
	for (i = 0; i < 4; i++)
	
		for (j = 0; j < 3; j++)
		
			int* a = &arr[i][j];
			printf("%p ", a);//%p用来打印地址。
		
	
		return 0;


发现相邻元素之间的地址是相差4个字节的,即使是上一行的最后一个元素与下一行的第一个元素也是一样的。也就是说,二维数组也是以像一维数组一样存放。

c++基础入门丨5.数组——一维数组和二维数组(代码片段)

操作系统:Windows10IDE:VisualStudio2019文章目录1一维数组1.1一维数组定义方式1.2一维数组数组名1.3冒泡排序2二维数组2.1二维数组定义方式2.2二维数组数组名所谓数组,就是一个集合,里面存放了相同类型的数据元素... 查看详情

c++基础入门丨5.数组——一维数组和二维数组(代码片段)

操作系统:Windows10IDE:VisualStudio2019文章目录1一维数组1.1一维数组定义方式1.2一维数组数组名1.3冒泡排序2二维数组2.1二维数组定义方式2.2二维数组数组名所谓数组,就是一个集合,里面存放了相同类型的数据元素... 查看详情

二维数据和一维指针数组(代码片段)

1.二维数组名a的含义:定义一个二维数组a:  inta[3][4]=1,3,5,7,9,11,13,15,17,19,21,23;  a数组包含3个行元素,a[0],a[1],a[2]。      每个行元素a[i]又是一个一维数组,它包含4个元素。a==&a[0]a+i==&a[i]a[0]==& 查看详情

vue二维数组合并一维数组(代码片段)

vue二维数组合并一维数组原理:先将二维数组转成一维数组,然后和一维数组进行合并,合并之后再转成二维数组。//在当前页先引入chunk方法不用下载自带的importchunkfrom'lodash/chunk'letarr1=[118.02,24.48];letarr2=[... 查看详情

前缀和——一维数组和二维数组的前缀和(代码片段)

一维数组前缀和定义对于长度为n的数组num[],0<=i&i<n,对于位置i的前缀和为Sum(num[0]~num[I]),即从0连续加到i的和。例如:num=[1,2,3],则前缀和数组为:sum=[1,3,6]12311+21+2+3应用示例例如,对于长度为n的数组num[],0<=i&i<n,并且0&... 查看详情

数组-二维数组(代码片段)

...属于引用数据类型数组的元素也可以是引用数据类型一个一维数组A的元素如果还是一个一维数组类型的,则此数组A称为二维数组二、二维数组的声明与初始化正确的方式://二维数组的声明和初始化int[]arr1=newint[]1,2,3;//一维//1.1... 查看详情

0511二维数组定义(代码片段)

二维数组数组的数组---二维数组的每一个元素是一个一维数组定义格式数据类型[][]数组名=new数据类型[二维数组的长度/包含的一维数组的个数][每个一维数组的长度];int[][]arr=newint[3][5];---定义了一个整型的二维数组,其中包含3个... 查看详情

c语言数组(验证二维数组内存是线性的|打印二维数组|以一维数组方式打印二维数组|打印二维数组值和地址)(代码片段)

...录一、验证二维数组内存是线性的1、打印二维数组2、以一维数组方式打印二维数组3、打印二维数组值和地址二、完整代码示例一、验证二维数组内存是线性的验证二维数组内存是线性的:验证方法如下;①给二维数组赋值,然后打... 查看详情

vue二维数组合并一维数组(代码片段)

vue二维数组合并一维数组原理:先将二维数组转成一维数组,然后和一维数组进行合并,合并之后再转成二维数组。//在当前页先引入chunk方法不用下载自带的importchunkfrom'lodash/chunk'letarr1=[118.02,24.48];letarr2=[... 查看详情

java数组(代码片段)

目录数组的概念数组的使用一维数组一维数组的使用步骤:一维数组的声明一维数组的创建一维数组的访问多维数组二维数组的声明二维数组的创建二维数组的访问作业作业一:作业二:作业三:作业四:数... 查看详情

egret之一维,二维数组(代码片段)

一维数组转换成二维数组下标公式:行=下标/二维数组列数列=下标%二维数组列数+1this.row1=Math.floor(index1/this.col[this.lev-1]+1);this.col1=Math.floor(index1%this.col[this.lev-1]+1);二维数组转一维数组:下标=(二维数当前行-1)*列数+二维数当前... 查看详情

数组(随机生成一维数组),二维数组的概念和题目设计(利用二维数组:任意给定分数去计算科目和人均平均分)(代码片段)

1//数组间的关系arr[]中的数字为几,[]内就有几个数2//内的数是从0开始,如需要打印应从0开数3如2,6,9,8,7打印arr[4]就是74#include<stdio.h>5#include<stdlib.h>6intmain()78intarr[]=1,2,3,4,8;910printf("%d",arr[3]);1112system("pau 查看详情

c++基础入门丨5.数组——一维数组和二维数组(代码片段)

操作系统:Windows10IDE:VisualStudio2019文章目录1一维数组1.1一维数组定义方式1.2一维数组数组名1.3冒泡排序2二维数组2.1二维数组定义方式2.2二维数组数组名所谓数组,就是一个集合,里面存放了相同类型的数据元素... 查看详情

[c语言]数组详解(代码片段)

文章目录数组的定义一维数组的创建和初始化数组的创建数组的初始化一维数组的使用一维数组在内存中的存储二维数组的创建和初始化二维数组的创建二维数组的初始化二维数组的使用二维数组在内存中的存储数组作为函数参... 查看详情

c语言-数组的定义和引用(代码片段)

数组的定义和引用1.一维数组、二维数组的定义、初始化和引用方法数组数据的特点:数组:一般形式:类型说明符数组名[常量表达式];说明:一维数组的引用1.引用方式:二维数组二维数组引用表现形式... 查看详情

四c语言之数组(代码片段)

目录1.一维数组的创建和初始化1.1数组的创建1.2数组的初始化2.一维数组的使用3.一维数组在内存中的存储4.二维数组的创建和初始化5.二维数组的使用6.二维数组在内存中的存储7.数组作为函数参数1.一维数组的创建和初始化1.1数... 查看详情

四c语言之数组(代码片段)

目录1.一维数组的创建和初始化1.1数组的创建1.2数组的初始化2.一维数组的使用3.一维数组在内存中的存储4.二维数组的创建和初始化5.二维数组的使用6.二维数组在内存中的存储7.数组作为函数参数1.一维数组的创建和初始化1.1数... 查看详情

资瓷区间修改+区间求和的树状数组(一维/二维)(代码片段)

一维:令(v_i)为差分数组,那么([0,k])的前缀和就是(sumv_i(k+1-i)=(k+1)cdotsumv_i+sumv_icdot(-i)),树状数组维护一下(v_i)和(v_icdoti)即可。template<typenameI>structFenwickstructNodeIv0,v1;voidadd(Id0,Id1) 查看详情