数组 C语言,c++语言数组
Yyds干货库存
@[目录]
一、一维数组的创建和初始化1。数组的创建数组是一组相同类型的元素。
如何创建阵列:
type _ t arr _ name[const _ n];//type_t是指数组的元素类型。//const_n是用于指定数组大小的常量表达式。由数组创建的实例:
//Code 1 int arr 1[10];//Code 2 int count=10;int arr 2[count];//什么时候可以正常创建数组?//Code 3c har arr 3[10];float arr 4[1];double arr 5[20];注意:创建数组时,必须在[]中给出常数,而不是变量。
2.数组的初始化。数组的初始化是指在创建数组时给数组的内容一些合理的初始值(初始化)。
看看代码:
int arr1[10]={ 1,2,3 };int arr2[]={ 1,2,3,4 };int arr3[5]={ 1,2,3,4,5 };char arr4[3]={ a ,98, c };char arr5[]={ a , b , c };char arr 6[]= abcdef ;当创建一个数组时,如果你不想指定数组的某个大小,你必须初始化它。数组中元素的数量是根据初始化的内容确定的。
但是对于下面的代码,我们要区分如何分配内存。
char arr 1[]= ABC ;char arr2[3]={a , b , c };3.一维数组的使用对于数组的使用,我们之前介绍过一个运算符:[],下标是指运算符。它实际上是数组访问的操作符。让我们看看代码:
# include stdio . h int main(){ int arr[10]={ 0 };//数组初始化不完整//计数数组中的元素个数intsz=sizeof(arr)/sizeof(arr[0]);//给数组的内容赋值。使用下标访问数组,下标从0开始。因此:int I=0;for(I=0;i i) { printf(%d ,arr[I]);}返回0;}摘要:
使用下标访问数组,下标从0开始。
2.可以计算数组的大小。4.一维数组在内存中的存储接下来,我们将讨论数组在内存中的存储。
看代码。
# include stdio . h int main(){ int arr[10]={ 0 };int I=0;for(I=0;I sizeof(arr)/sizeof(arr[0]);i) { printf( arr[%d]=%p\n ,I,arr[I]);}返回0;}
仔细看输出结果,我们知道随着数组下标的增加,元素的地址也在有规律的增加。
可以得出结论,数组是连续存储在内存中的。
二。二维数组1的创建和初始化。二维数组的创建//数组创建int arr[3][4];字符排列[3][5];双重逮捕[2][4];2.二维数组的创建//数组初始化int arr[3][4]={1,2,3,4 };int arr[3][4]={{1,2},{4,5 } };int arr[][4]={{2,3},{4,5 } };3.二维数组的创建二维数组的使用也是通过下标。
看看代码:
# include stdio . h int main(){ int arr[3][4]={ 0 };int I=0;for(I=0;I I){ int j=0;for(j=0;j j){ arr[I][j]=I * 4j;} } for(I=0;I I){ int j=0;for(j=0;j j ) { printf(%d ,arr[I][j]);} }返回0;}4.二维数组像一维数组一样存储在内存中。这里我们尝试打印二维数组的每个元素。
# include stdio . h int main(){ int arr[3][4];int I=0;for(I=0;I I){ int j=0;for(j=0;j j ) { printf( arr[%d][%d]=%p\n ,I,j,arr[I][j]);} }返回0;}
由此,我们可以分析出,其实二维数组在内存中是连续存储的。
第二,数组越界。数组的下标有范围限制。
数组的底部规则从0开始。如果输入中有n个元素,最后一个元素的下标是n-1。
所以如果数组的下标小于0或者大于n-1,就说明数组越界了,超出了数组合法空间的访问。
c本身不做数组下标的越界检查,编译器也不一定报错。但是编译器不报错,不代表程序就是正确的。所以程序员写代码的时候最好自己做越界检查。
# include stdio . h int main(){ int arr[10]={ 1,2,3,4,5,6,7,8,9,10 };int I=0;for(I=0;i i ) { printf(%d\n ,arr[I]);//当I等于10时,} return 0被越界访问;}二维数组的行和列也可能越界。
1.阵列的名称是什么?# include stdio . h int main(){ int arr[10]={ 1,2,3,4,5 };printf(%p\n ,arr);printf(%p\n ,arr[0]);printf(%d\n ,* arr);//输出结果返回0;}结论:
数组名是数组第一个元素的地址。(有两个例外)
如果数组名是第一个元素地址,那么:
int arr[10]={ 0 };printf(%d\n ,sizeof(arr));为什么输出结果是:40?
补充:
Sizeof(数组名),计算整个数组的大小。Sizeof里面放了一个数组名,数组名代表整个数组。数组名,并取出数组的地址。数组名,表示整个数组。除了这两种情况1和2,所有的数组名都表示数组第一个元素的地址。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。