数组

什么是数组

首先是一种数据结构,可以存储一个固定大小的相同类型元素的顺序集合。是一组相同类型元素的集合。

image.png

一维数组

声明一维数组

Type arryname[arrysize]
aryyname-数组名称
Type-数组类型 可以是C中任意的数据类型
arrysize-数组的大小(必须是大于0的整型常量)
例如:声明一个长度为10的整型数组。
int arry[10] 可以存放十个整型数据

数组的初始化

  1. 逐个初始化
    int arry[10]={1,2,3,4,5,6,7,8,9,10};
    从数组的第一个索引开始赋值 1 2 3 4 5 6 7 8 9 10
    赋值的个数不得超过数组的大小image.png
  2. 完全初始化 int arry[10]={0};//数组中的元素都被初始化为0
  3. 未知大小 如果不知道需要的数组大小 可以int arry[]= {初始化};这时候数组的大小就是初始化元素的个数
  4. 单个数组初始化 int arry[\10];arry[\0]=1; arry[\9]=10 //根据数组的索引值 赋值数组中单个数组元素的值 C语言基索引是0 数组最后的索引等于数组大小-1

image.png

如何获取数组的大小

以char carry[]=”I love C”;
如果我们要一个一个数元素,效率低且很原始!!!sizeof(数组名)/数组名[0]
即可得到数组的长度 因为是字符串格式,会在结尾加上’\0’表示字符串的结束,所以长度是9

访问数组

int num = arry[5];可以获取到索引为5 数组的第六个元素的值
利用for循环给数组赋值及访问数组

#include<stdio.h>
int main()
{
	int arry[10];
	for (size_t i = 0; i < 10; i++)
	{
		arry[i] = i;
	}
	//arry[10] = 15;
	for (size_t i = 0; i < 10; i++)
	{
		printf("arry[%d] = %d\n", i, arry[i]);
	}
}

一维数组在内存中的存储

image.png

因为还没有写到指针,这里就不再深究内存相关的东西了,等到指针那一节,再说。

二维数组

二维数组的声明

int arry[2][3];//声明一个”两行三列的数组” 第一个索引代表行索引 第二个索引代表列索引

image.png

二维数组初始化

完全初始化

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

image.png

从’0行0列’开始赋值 从先赋值递增列进行赋值
arry[ 0][0] arry[0][1] arry[0][2]
arry[ 1][0] arry[1][1] arry[1][2]
还有一种写法是将
int arryj[3][2] = {
{1,2},
{3,4},
{5,6}
};
最大{}里面的{}的数量就是行 而最里面{}的数量就是列 我个人偏向这种赋值方法 很直观 方便理解和查看。

部分初始化

int arry[3][4]={1,2,3,4,5,6};
从arry[0][0]初始化到arry[1][1] 其他元素都为0.
一维数组中 我们可以省略数组的大小 根据初始化数组的元素确定数组的大小 二维数组 可以省略行 但是不能省略列
int arryj[][2] = {
{1,2},
{3,4},
{5,6},
{7,8},
{9,10},
{11,12}
};
这里表示的是初始化一个6行2列的二维数组

访问二维数组

可以根据上面那个图理解 比如我要获取数组arryj[6][2]的第二行第二列
int num = arryj[1][1]
遍历二维数组也是同理

int arry2[2][3] = { 1,2,3,4,5,6 };
	for (size_t i = 0; i < 2; i++)//行
	{
		for (size_t j = 0; j < 3; j++)//列
		{
			printf("%d\t", arry2[i][j]);
		}
		printf("\n");
	}

image.png

二维数组在内存中的存储

二维数组在内存中也是连续的,和一维数组一样 理解的时候可以把二维数组当作一维数组理解
比如int arry[12] 二维数组可以写作arry[3][4] 即三个一维数组组成了一个二维数组

数组越界

超出数组的大小 就会造成数组的越界 越界访问一段内存是很危险的行为 轻则乱码重则崩溃

image.png

网站标题:CV鼻祖洋芋

原创文章,作者:locus,如若转载,请注明出处:https://blog.cvpotato.cn/forward-code/c-2/64/

本博客所发布的内容,部分为原创文章,转载注明来源,网络转载文章如有侵权请联系站长!

(0)
上一篇 2024年11月13日 下午11:15
下一篇 2024年11月13日 下午11:56

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注