重庆分公司,新征程启航

为企业提供网站建设、域名注册、服务器等服务

【初学者必看】C语言数组-创新互联

1.数组的定义

在C语言中,数组是一类相同元素的集合。注意,数组中的所有元素必须是类型相同的。

我们拥有十多年网页设计和网站建设经验,从网站策划到网站制作,我们的网页设计师为您提供的解决方案。为企业提供成都网站设计、成都做网站、微信开发、微信小程序开发手机网站制作HTML5、等业务。无论您有什么样的网站设计或者设计方案要求,我们都将富于创造性的提供专业设计服务并满足您的需求。2.数组的创建与初始化 2.1创建

直接上代码

int arr1[10];
char arr2[10];

int是数组中元素类型,arr1是该数组名称,[10]表示该数组有10个元素,需要注意的是,[]中的数字必须是一个常量表达式,即使是const修饰的常变量也不行。
上述的写法并没有对数组中的元素赋值,即未进行初始化,那如何初始化呢?

2.2初始化

①在我们不知道要往数组中放入什么元素时,我们可以讲{0}赋值给这个数组,这样数组里的每个元素都会被初始化为0。在这里插入图片描述②不完全初始化:只给数组中部分元素初始化了一定的值,则未被初始化的元素默认为0。(整形数组补0,字符数组补‘\0’)
在这里插入图片描述③初始化时[]中不写数字也行,这是数组会根据你给定的元素个数来判断该数组的元素个数,但这样写则一定要对数组初始化。例如:
在这里插入图片描述

📕2.3字符数组

字符串数组的结束标志为’\0’
让我们对比一下两种代码,这样的2种结果相同吗?

char arr1[]={'a','b','c','d'};//写法1
char arr2[] = "abcd";//写法2

让我们看看结果
在这里插入图片描述从上图中,我们可以看到,第二种写法在字符串的最后加了一个’\0’,而第一种写法则没有。
由于在字符串中,'\0’是其结束的标志,如果没有’\0’则可能会出现一些问题,所以在以后写代码时,最好使用第二种写法,而一定要用第一种写法时则需要在初始化时手动加上’\0’。

🚀3.数组在内存中的存储以及访问数组元素

①数组中元素在内存中是连续存储的,数组中的每一个元素都有其对应的下标,并且下标从0开始。
在这里插入图片描述在这里插入图片描述

②正因为数组中的每一个元素都有其对应的下标,所以我们可以通过下标来访问其中的元素,(如果一个元素是数组arr中的第2个,那它的下标就是1,我们就可以通过arr[1]来访问该元素)

上述我们写的都是一维数组,接下来我们讲解二维数组
🏰4.二维数组 4.1.二维数组是这样定义的:
int arr[3][4]={0,1,2,3,4,5,6,7,8,9,10,11};

我们可以这样理解这个数组:arr和最近的[3]结合,arr[3]表示这是一个数组,数组名为arr,元素个数为3个,除去arr[3]剩下的就是元素类型,即int [4],所以这就是一个含有3个int [4]数组的数组。
在这里插入图片描述在这里插入图片描述

在讲一维数组时我们说到数组在内存中是连续存放的,所以二维数
组中的一维数组也是连续存放的,由此可以推出二维数组中的每一个元素也都是连续存放的。
4.2.二维数组元素访问

理解了上面的内容后,元素访问应该就不难悟得了,如果我们要访问上述数组中6这个元素,我们则需要先访问arr[1],再访问其中下标为2的元素,即arr[1][2],是不是很简单呢?

4.3二维数组的初始化
int arr[2][3]={{1,4},{5,6,7}};
int arr[2][3]={1,2,3,4,5,6};
这两种初始化的效果分别是:
第一种:精确地对二维数组中的每一个维数组进行初始化
第二种:将初始化的值按顺序填充在二维数组中

在这里插入图片描述

①若初始化不完全,没初始化的元素会默认设置为0(或‘\0’等),这点和一维数组是一样的
②和一维数组不同的是,初始化二维数组时arr[][]中第二个方括号里的常量表达式是不能省略的,因为这样二维数组中元素的类型就不确定了,但第一个方括号里的常量表达式是可以省略的。


🐒5.数组越界

当一个数组创建后,程序会向内存中申请对应的空间来存放该数组中的每一个元素,如果访问申请空间之外的空间,那自然就是内存的非法访问了。

int arr[2] = {1,2 };
arr[2]=3;
在这个代码中,数组只申请到arr[0],arr[1]这个2个元素的空间,arr[2]并未申请,
在这里便造成了数组的越界访问。这种做法编译器会报错的。

在这里插入图片描述


🍓 6.数组传参
在讲传参之前,先解释一下数组名

在一般情况下,数组名都是数组首元素的地址,但有两个情况例外:
①sizeof(数组名)
②&数组名
这两种情况下数组名则表示整个数组


所以,在我们讲数组名当作参数传给一个函数的时候,传过去的并不是整个数组,而是数组首元素的地址。
在这里插入图片描述

这个时候就有小朋友可能会问了,传过去的是地址我可以理解,但这里函数形参明明都是一个
int数组,为什么还能接收到一个地址呢?

在解答这个问题之前我们先聊聊访问数组元素时用到的下标引用操作符:
其实arr[1]等价于*(arr+1)
所以函数形参部分的int arr[]等价于 int *arr,意为接收一个指向int类型的指针,这样是不是就讲得通了呢?

★所以,在定义函数时,如果函数要接收一个传过来的数组,形参可以写一个指针变量的形式,也可以直接写成数组的形式(如上面的int arr[]),如果写成类似int arr[]的形式,方括号内部可以写上数组的大小,也可以不写,在这里编译器都会把它看作是一个int *类型的变量。 🌳7.总结
①数组是相同类型元素的有序的序列。
②数组中元素用下标引用操作符[ ]访问,且访问数组时注意别越界访问。
③除了在定义数组的时候,arr[i]可以理解为*(arr+i)。
④数组名在两种情况下代表数组整体,其他情况都是代表数组首元素的地址。

谢谢阅读! ^ _ ^
在这里插入图片描述

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


网页名称:【初学者必看】C语言数组-创新互联
链接URL:http://cqcxhl.com/article/dpdsis.html

其他资讯

在线咨询
服务热线
服务热线:028-86922220
TOP