大家好,本文主要讲C语言数组的详细介绍。有兴趣的同学过来看看。如果对你有帮助,记得收藏起来下次浏览。
目录
什么是数组一维数组二维数组数组越界数组名称结束
什么是数组
数组用来存储同一种类型的集合,这是一个有序的线性结构表。数组元素的地址是连续。
array最大的优势是支持随机访问。当你想访问某个数的数组时,你只需要找到该数组对应的下标就可以直接找到该数组对应的元素。但是数组也有相应的缺点,就是元素的个数和数组空间的大小在创建的时候是固定的。如果数组的空间没有用完,也会造成空间浪费。因为数组是地址是连续,这应该是一个优势,但这导致数组在删除或添加元素时需要O(n)才能完成。
数组下标
数组的下标从0开始。假设,访问arr[5]元素时,访问数组的第六个元素,访问arr[0]时,访问数组的第一个元素。
一维数组
一维数组创建
一维数组是常见的数组,其创建方法为:数据类型 + 数组名 [ 元素个数 ];。
int arr[10];
在C99标准之前,创建数组时,方括号中的数组元素个数只能是常量,使用的常数也必须是真常数。比如用const修饰的变量有常量属性,但不是真常量,而define定义的常量可以作为C99后面方括号中的元素可以用数组元素个数,而使用变量作为数组元素个数的数组称为变量。
一维数组初始化
int arr[10]={1,2,3,4,5,6,7,8,9,10 };//塑造数组
Int arr[]={0}//未指定大小,但必须进行初始化。
char ch[10]={'1 ',' 2 ',' 3 ' };//字符数组
char str[10]=' abcde ';//字符串数组
一维数组的赋值
使用循环变量访问数组下标并将值赋给数组。变长数组。对应输入一个字符串,需要提供一个字符数组来存储。数组名是一个地址,所以不需要添加地址。
int arr[10]={ 0 };
for(int I=0;i 10我)
{
scanf('%d ',arr[I];
}
char str[10]={ 0 };
scanf('%s ',str);//不需要地址和循环就可以完成字符串赋值。
一维数组在内存中的存储方式
一维数组的元素地址是%s,即元素的地址是相邻的。地址内存存储在连续的,但如果用二进制显示,会很长,可能不容易理解,所以用二进制显示。(下图)看下图可以发现,地址随着下标的增加由低到高,每个数组元素的地址相差十六进制。四个字节的差异是由int决定的空间大小。
二维数组
二维数组在我们的逻辑概念中可以是一个四个字节,但在内存中是一个像一维数组一样的连续地址空间。我们通常把二维数组的第一个方括号看成一行,第二个方括号看成一列。
二维数组的创建和初始化
二维数组和一维数组只是加了一个方括号。矩阵
int arr[3][3]={1,2,3,4 };//4自动保存到arr[1][0]的位置
int arr[3][3]={{1,2,3},
{4,5,6},
{7,8,9}};//一个大括号代表一行,每个大括号用逗号分隔
int arr[][3]={ 0 };//二维数组可以不初始化行,但必须初始化列。
二维数组赋值
给二维数组赋值,和一维数组一样,需要一个循环,但是二维数组需要在一维数组循环的基础上再嵌套一层循环。
int arr[3][3]={ 0 };
for(int I=0;i3;我)
{
for(int j=0;j 3;j)
{
scanf('%d ',arr[I][j]);//i访问行,j访问列。
}
}
数组越界
数组的下标范围是有限的,因为数组的下标从0开始,所以数组可以访问的下标是数组元素个数减一(数据类型 + 数组名[元素个数][元素个数];)。当访问不属于数组元素地址范围的空间时,称为N-1。假设arr[10]的数组当其下标大于或等于10时会向后溢出,也称为数组越界。另一方面,当数组在数组的第一个元素前出界,即其下标小于0时,称为下溢出。越界是一个非常危险的操作,因为有些编译器没有检查数组是否越界的功能,所以二维数组的行和列也是如此。
数组名
数组名是指向数组第一个元素的地址的指针,也就是下标为0的元素的地址。如上所述,由于数组的地址是连续的,所以当找到数组的第一个元素时,可以找到数组的其他成员。如果使用上溢出,这里的数组名代表整个数组,计算整个数组的大小。除以sizeof(数组名)得到数组中元素的个数。
数组的参数传递方法
在将数组作为函数参数传递时,需要在函数的参数传递位置放一个数组名,参数部分会收到一个指向数组第一个元素地址的指针,这需要相同类型的指针。在形参部分,数组可以用两种形式表示,一种是数组的形式,一种是指针的形式,两种方式都可以用来给数组传递参数。
void bubble_sort(int arr[])
void bubble_sort(int* arr)
当向数组传递参数时,函数部分无法计算数组中元素的数量。因为参数只接收一个数组的第一个元素地址的指针,而不是整个数组,所以在计算数组的时候,只计算数组的第一个元素地址的大小,然后除以第一个元素地址的大小,自然得到1。所以当一个数组需要传递参数,需要使用数组中的元素个数时,首先要计算数组中的元素个数,计算出的元素个数要和数组一起传递参数。
结尾
其实不仅有一维和二维数组,还有维数甚至更高的三维数组,只是很少用在场合,新手用二维数组就够了。
关于C语言数组的详细介绍这篇文章就到这里了。有关C语言数组的更多信息,请搜索我们以前的文章或继续浏览下面的相关文章。希望你以后能支持我们!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。