栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

初学C语言系列之数组

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

初学C语言系列之数组

学习目的

了解数组

了解一维数组

了解二维数组

数组的实际应用

目录

数组的定义

一维数组

一维数组的创建

一维数组的初始化

一维数组的使用

一维数组在内存中的存储

二维数组

二维数组的创建

二维数组的初始化

二维数组的使用

二维数组在内存中的存储

二维数组的视角

数组越界

一维数组的越界

二维数组的越界

数组作为函数参数

数组名

指针

数组的定义

数组是同类型元素的集合。

数组的类型: type [const_n]

一维数组

一维数组的创建

type name [const_n]

含义:向内存申请空间

注意:const_n在不支持C99标注的编译器上只能使用常量,反之可以使用变量(不能初始化,GCC可以支持)

int arr[10];
char arr[10];

一维数组的初始化

含义:创建数组同时赋值

分为完全初始化和不完全初始化,

int arr[5]={1,2,3,4,5} 完全初始化
int arr[5]={1}不完全初始化,未被初始化的部分自动被赋值为0
-----------------
字符数组与字符串
char ch[]={'a','b','c'}完全初始化,内容为a,b,c
char ch[]="abc"完全初始化,内容为a,b,c,
char ch[5]="abc"不完全初始化,内容a,b,c,,0最后时系统自动

一维数组的使用

下标

下标是数组元素的编号,从0开始,

数组123456789
数组下标012345678

 下标引用操作符[]

对数组的操作,必须使用到数组的下标及下标引用操作符

int main()
{
	int arr[10];
	int i;//i就是下标
	for (i = 0; i < 10; i++)//使用下表对数组赋值
	{
		arr[i] = i + 1;
	}
	for (i = 0; i < 10; i++)//打印下标
	{
		printf("%d ", arr[i]);
	}
	printf("n");
	arr[5] = 999;//使用下标对数组元素赋值
	printf("%dn", arr[5]);//使用下标打印数组元素
}

 

一维数组在内存中的存储

一维数组在内存中的地址是连续的,而且随着下标的递增而增加

数组地址0x110x120x130x140x150x160x170x180x19
数组下标012345678

注意:每个元素的地址只是字节的首地址

int main()
{
	int arr[10];
	int i;//i就是下标
	for (i = 0; i < 10; i++)//使用下表对数组赋值
	{
		arr[i] = i + 1;
	}
	for (i = 0; i < 10; i++)//打印元素地址
	{
		printf("%p ", &arr[i]);
	}
	printf("n");
	system("pause");
	return 0;
}

 

二维数组

二维数组的创建

type name [const_n][const_n]

注意:二维数组创建能省略行坐标,但是不能省略列坐标,列坐标决定每一行元素的多少,没有列坐标就无法确定下一行开头元素的地址

二维数组的初始化
int arr[3][3]={1,2,3,4,5,6,7,8,9}
int arr[3][3]={{1,2,3},{4,5,6},{7,8,9}}
int arr[3][3]={1,2,3}
int arr[3][3]={{1},{2},{3}}

二维数组的使用

与一维数组相同,需要嵌套循环

二维数组在内存中的存储

二维数组在内存中的地址是连续的,而且随着下标的递增而增加

数组地址0x110x120x130x140x150x160x170x180x19
数组下标012345678

注意:每个元素的地址只是字节的首地址

二维数组的视角

以一维数组的视角来看,内存中数组的地址是连续的,所以可以把一个二维数组看成一维数组

arr[2][5]与arr[10]相同

0x110x120x130x140x150x160x170x180x190x20
arr[0][0]arr[0][1]arr[0][2]arr[0][3]arr[0][4]arr[1][0]arr[1][1]arr[1][2]arr[1][3]arr[1][4]

以列表的角度看,arr[3][3]可以看成三行三列的一个列表

arr[0][0]arr[0][1]arr[0][2]
arr[1][0]arr[1][1]arr[1][2]
arr[2][0]arr[2][1]arr[2][2]

以一维数组的数组的角度看

arr[0]
arr[1]
arr[2]

 此时,arr[0]是个一维数组

int main()
{
	int arr[3][3];
	printf("%dn", sizeof(arr[0]));
	system("pause");
	return 0;
}

数组越界

一维数组的越界

内存中,数组前后都有其他的空间,超过数组的范围会影响其他的空间

int main()
{
	int arr[3] = {1,2,3};//下标是0-2,超过下标的范围,就是越界
	printf("%dn", sizeof(arr[6]));
	system("pause");
	return 0;
}

 

二维数组的越界
int main()
{
	int arr[3][3] = {1,2,3,4,5,6,7,8,9};//下标是0-2,超过下标的范围,就是越界
	int i = 0,j=0;
	for (i = 0; i < 3; i++)
	{
		for (j = 0; j < 5; j++)
		{
			printf("%d ", arr[i][j]);
		}
		printf("n");
	}
	system("pause");
	return 0;
}

 

数组作为函数参数

数组名
void add(int arr[])
void add(int arr[][const_n])

指针
void add(int *parr)

 注意:数组名是首元素的地址,但是二维数组中,数组名相当于第一行的地址

例外:sizeof(数组名)以及&数组名时,数组名代表整个数组

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/934888.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号