【C语言必经之路——第5节】数组内容总结

目录

一、引言

二、一维数组

1、一维数组的创建

 2、一维数组的初始化

3、一维数组的使用

4、一维数组的存储

 二、多维数组(以二维数组为主介绍)

1、多维数组的介绍

 2、二维数组的创建

 3、二维数组的初始化

 4、 二维数组的使用

 5、二维数组在内存中的存储

 三、数组越界


一、引言

相同类型的变量放在一起处理会方便很多,这个时候就要用到数组了。

二、一维数组

1、一维数组的创建

type_t  arr_name  [const_n];
// type_t 是指数组的元素类型

// arr_name 是数组名
// const_n 是一个常量表达式,用来指定数组的大小

 数组创建的三个例子:

//代码1
int arr1[10];

//代码2
int count = 10;
int arr2[count];


//代码3
char arr3[10];
float arr4[1];
double arr5[20];

如上,代码2中要介绍一个新的知识点,在C99标准之前,[ ]中必须是一个常量才行,不能使用变量。在C99标准之后,开始有了变长数组的概念,数组的大小可以使用变量指定,但是使用变长数组的时候数组是不能被初始化的。目前OJ在线编译环境都是支持变长数组的。

 2、一维数组的初始化

 数组的初始化是指在创建数组的同时给数组的内容一些合理初始值,数组在创建的时候如果不想给数组确定的大小就得初始化。数组的元素个数根据初始化的内容来确定。格式如下:

1. 直接在大括号内部放置数组内容,用逗号隔开:

    int v[ ] = {1,2,3,4,5};              /*元素个数可以省略(自动认为是5)*/
2. 另外还有一个规则,就是用0对{}内没有赋初始值的元素进行初始化。因此,在下面的声明中,[2]之后的元素都使用0来初始化。
    int v[5]= { 1,3 } ;                           /*用( 1,3,0,0,0)初始化*/
3. 如果要使用0初始化数组中的全部元素,这种情况虽然用0对没有赋初始值的v[0]进行初始化是理所应当的,但初始值被省略的v[1]之后的元素也用0进行初始化。具体就是可以下面这样
    int v[5] = { 0 ) ;                              /*用(0,0,0,0,0)初始化 */
4. 当初始值的个数超过数组的元素个数的时候,程序会发生错误。

    int v[3]= {1,2,3,4);                 /*错误:初始值过多*/
5. 不能通过赋值语句进行初始化。下面是一个错误的例子。
    int v[ 3];
    v =[1,2,3);                              /*错误:不能使用赋值语句进行初始化*/ 

但是对于下面的代码要区分一下

 

 当初始化为单个的字符时,数组内部就是对应的字符,数组大小也是字符的个数,但是当初始化为字符串时,会在字符串末尾加一个"\0",这也是字符串结尾的标志。

3、一维数组的使用

 对于数组的使用我们之前介绍了一个操作符: [ ] ,下标引用操作符。它其实就是数组访问的操作符。

 1. 数组是使用下标来访问的,下标是从0开始。
 2. 数组的大小可以通过计算得到。

#include <stdio.h>
int main()
{
	int arr[10] = { 0 };//数组的不完全初始化,只初始化一个0,则全部元素都是0.

	int sz = sizeof(arr) / sizeof(arr[0]);//计算数组的元素个数
	printf("%d\n", sz);

	//对数组内容赋值,数组是使用下标来访问的,下标从0开始
	int i = 0;//作下标
	for (i = 0; i < sz; i++)//这里写sz是前面对数组长度进行了计算
	{
		arr[i] = i;
	}

	//输出数组的内容
	for (i = 0; i < sz; ++i)
	{
		printf("%d ", arr[i]);
	}

	return 0;
}

4、一维数组的存储

先看一段代码

 可以发现随着数组下标的增长,元素的地址,也在有规律的递增。
由此可以得出结论:数组在内存中是连续存放的。如下图所示。

 二、多维数组(以二维数组为主介绍)

1、多维数组的介绍

上面的数组元素都是int型或double型等单一类型。实际上,数组的元素也可以是数组本身。以数组作为元素的数组是二维数组,以二维数组为元素的数组是三维数组。当然也可以生成维数更高的数组。二维数组以上的数组,统称为多维数组。
总结:多维数组是以数组为元素的数组。

 2、二维数组的创建

//数组创建
int arr[3][4];
char arr[3][5];
double arr[2][4];

 3、二维数组的初始化

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

 4、 二维数组的使用

二维数组的使用也是通过下标的方式。代码与运行结果如下:

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

 5、二维数组在内存中的存储

看看下方的运行情况:

 可以发现二维数组在内存中也是连续存储的,用图表示就是下面这样。

 三、数组越界

数组的下标是有范围限制的。
数组的下规定是从0开始的,如果数组有n个元素,最后一个元素的下标就是n-1。
所以数组的下标如果小于0,或者大于n-1,就是数组越界访问了,超出了数组合法空间的访问。
C语言本身是不做数组下标的越界检查,编译器也不一定报错,但是编译器不报错,并不意味着程序就是正确的,程序员写代码时,一定要自己做越界的检查。当然二维数组的行,列都是会存在越界的。

今天的分享就到这啦😉


如果我的文章对您有帮助,

请 “点赞” “收藏” “关注” 一键三连哦!

想了解更多知识请前往故里♡927的博客

如果以上内容有什么问题,欢迎留言,大家一起学习,共同进步。


我们下期见😉~~

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

故里♡9513

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值