数组(1)

目录

一维数组

定义

数组的初始化

数组下标

二维数组

二维数组的初始化


一维数组

定义

数组就是在内存中开辟一段连续的空间,来存放一组相同类型元素的集合,并且可以根据元素在数组中所在的位置把它们一个一个地选出来。

声明一个数组,需要指明数组元素的类型和数量。如:在arr数组中放10个int类型的元素,就可以写成:int arr[10];

数组的长度可以用任何(整数)常量表达式指定,我们的程序可能需要调整数组的长度,比较好的办法是用宏来定义数组的长度:

#define N 10
int arr[N];

当然在C99标准中引入了变长数组的概念,使得数组长度可以是一个变量,但是目前只有gcc编译器支持变长数组。

数组的初始化

int arr[10];               
//未进行初始化,里面放的是随机值。
int arr[10]={1,2,3,4,5,6,7,8,9,10};
//完全初始化,每个数组元素都有对应的值
int arr[10]={0}; 
//不完全初始化,只赋值了一个0,但是数组的长度为10,所以后面未被初始化的元素都会被系统默认初始化为0.

在定义数组时,长度可以省略,此时编译器会根据声明的内容来确定数组的长度。如:

int arr[ ]={1,2,3,4,5};此时的数组arr的长度是5,因为只初始化了五个数组元素

数组下标

数组元素始终是从0 开始,因此 长度为n的数组元素的下标是0 ~ n-1.

对于读取或者打印数组是,必须要把一个数组分开进行操作

	for (i = 0; i < N; i++)
	{
		scanf("%d", &a[i]);
	}
	for (i = 0; i < N; i++)
	{
		printf("%d ", &a[i]);
	}

数组的下标可以是任何整数表达式,如:a[i*3 + j] = 0;


在C语言中,不要求检查下标的范围。当下表超出范围时,系统可能不会报错。

#include <stdio.h>
int main()
{
	int i = 0;
	int arr[10] = { 0 };
	for (i = 0; i <= 12; i++)
	{
		arr[i] = 0;
		printf("hello world\n");
	}
	return 0;
}

在VS编译器下,这个代码的结果是死循环的。因为当i = 12时,程序会把 0 存储在arr[12]中,但是arr[12]不存在,因此会在arr[9]后面的第3个位置存放数值0。如果在内存中变量 i 正好存放在arr[9]后面的第3个位置,那么就是变量i被重置为0,这就导致了死循环。 

 


二维数组

数组可以是任意维数,比较常见是的二维数组,又称为矩阵。如:

int arr[m][n] = {0};

arr数组有m行n列,和一维数组一样,数组元素的下标都是从0开始。在内存中二维数组不会一层一层地去存储,而是按照行主序存储数组的。

二维数组的初始化

二维数组的初始化和一维数组差不多,但是在一维数组中[ ]里面的数字可以省略,而在二维数组中

行可以省略,列是不可以省略的。如:int arr[ ][5] = { 0 };

猜你喜欢

转载自blog.csdn.net/qq_54880517/article/details/123299298