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

C语言中的数组

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

C语言中的数组

目录

1.数组的定义

2.一维数组

2.1一维数组的创建

2.2一维数组初始化

2.3一维数组访问

3.二维数组

3.1二维数组的创建

3.2二维数组的初始化

 3.3二维数组的访问

3.4数组越界访问

3.5数组作为函数参数


1.数组的定义

数组就是一组相同类型的元素的集合,数组按照数据类型分有整数,字符串等类型,按照维度分有一维数组、二维数组等,二维以上的数组应用比较少就不做介绍,重点介绍一维和二维数组

2.一维数组

2.1一维数组的创建
int arr[10]

int是数组的类型,arr是数组的名称,[10]表示这个数组最多可以存放10个元素

关于“[]”内数字需要说明,在C99标准之前“[]”内只能使用常量,直到C99标准中增加变长数组,才可以使用变量,如果编译器不支持C99的话,那下面的写法就不允许

int n=10;
int arr[n];

2.2一维数组初始化
int arr1[5]={1,2,3,4,5};
int arr2[5]={1};
int arr3[]={1,2,3,4,5};

上述三种初始化都可以

第二种首元素为1,数组其它元素默认为0

第三种数组会根据元素个数自动添加“[]”内数字

需要注意char类型的数组

假设有下列的数组

char ch1[]="abc";
char ch2[]={'a','b','c'};

ch1和ch2内元素个数是相同的吗?

我们来看一下

二者元素个数并不相同,笔者在之前博客中有提到过,ch1的写法在字符串后面其实还有一个''作为结束的标志,而ch2中就没有'' ,这可以从strlen的返回值看到

2.3一维数组访问

一般通过下标引用操作符“[]”来访问,数组的下标是从0开始

也就是说arr[0]就是访问数组的第一个元素,注意不要和创建数组时的“[]”弄混了,虽然它俩一样,但功能是不同的。

除了下标外,数组还可以用指针访问

 还有就是数组在内存中是连续存放的

 一般用指针访问数组首元素时直接将数组名传递给指针即可,数组名大多数情况下就是首元素地址。但两种情况除外:

1.sizeof(arr):sizeof求数组的大小,此时arr便不是首元素地址

2.&arr:取出整个数组的地址,以首元素地址表示,虽然值相同,但表达的内容却完全不同

3.二维数组

3.1二维数组的创建
int arr[3][3];

基本和一维数组的创建类似,两个“[]”前面的表示行数,后面的表示列数

行数可以不填,但列数必须填

二维数组中arr[n]表示每一行的首元素的地址arr[0]就是arr[0][0]元素的地址,arr[1]就是arr[1][0]元素的地址,以此类推

3.2二维数组的初始化
int arr1[3][3]={1,2,3,4,5,6,7,8,9};
int arr2[3][3]={{1},{2},{3}};
int arr3[3][3]={0};

我们来看看这三种初始化数组中元素是如何分配的

arr1:第一行是1 2 3,第二行4 5 6,第三行7 8 9

 arr2:除每一行首元素的值外,其余都是0,三行首元素值分别为1 2 3,arr2是定义了每一行的首地址的元素

 arr3:所有元素都为0

 3.3二维数组的访问

同样的,二维数组也可以通过下标和指针来访问,数组名也和一维数组一样表示首元素地址,二维数组在内存中也是连续存放的

3.4数组越界访问

数组的下标是有范围限制的。 数组的下规定是从0开始的,如果数组有n个元素,最后一个元素的下标就是n-1。 所以数组的下标如果小于0,或者大于n-1,就是数组越界访问了,超出了数组合法空间的访问。

就C语言来说,C语言本身并不做数组下标越界的检查,而编译器也不一定会报错,所以在写代码时需要自己做好检查防止数组越界访问

3.5数组作为函数参数

上面介绍过数组名相当于首元素地址,所以数组传参的时候传递给函数的是首元素的地址,而不是整个数组

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

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

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