目录
一、如何定义一维和二维数组?
1.只定义,不赋值:
//只定义不初始化,内存内存放随机值
int arr[10];//一维
int arr[2][3]; //二维
一维也可以这样定义:
int arr[]={1,2};//这个的大小就是根据赋的初值系统自己计算
注意:
- int arr[]; 这样不对
- int arr[a]; []里面的数字必须为常量,如果a是变量未赋值的话就是错误的写法
二维也可以这样定义:
int arr[][3] = { {1,2,3},{4,5,6} };//这个的行大小就是根据赋的初值系统自己计算
注意:
- int arr[][] = { {1,2,3},{4,5,6} }; //错误的写法
- int arr[2][] = { {1,2,3},{4,5,6} }; //错误的写法
2.不完全赋值:
一维:
int arr[2]{1,2};
int arr[2]={1}; //未赋值的位置值为0
二维:
int arr[2][3] = { {1,2,3},{4,5,6} };
int arr[2][3] = { {1,2},{3} }; //未赋值的位置值为0
int arr[2][3] = { 1,2,3,4,5 }; //行优先,未填充的位置值为0
二、如何修改已赋值数组?
直接修改即可,例:
将第二行第二列的值修改为9:arr[1][1]=9;
一维:
二维:
三、数组的地址怎么开辟?
1.静态开辟
- 一维数组:直接定义声明赋值即可。
- 二维数组:直接定义声明赋值即可。地址是连续的,实际内存还是一维数组,是一维数组嵌套一维数组。
2.动态开辟malloc
- 一维数组:
-
int * brr=(int*)mallloc(sizeof(int)*n);//开辟一段内存存储长度为n的数组brr
二维数组:
-
// 动态开辟的前一行与后一行的地址不挨着,是随机开辟的 int** brr = (int**)malloc(sizeof(int*) * row);//ROW为行数 for (int i = 0; i < ROW; i++) { brr[i] = (int*)malloc(sizeof(int) * column);//column为列数 memset(brr[i], 0, column * sizeof(int));//memset初始化内存 }
或者参照这篇文章: C语言实现动态二维数组的开辟
-
-
-
四、二维怎么访问数组?
(1)访问行:数组名[ ];
arr[0]-> 第一行
arr[1]-> 第二行
arr 数组名的两层含义:
1.指向首元素地址= &arr[0][0]≠&arr (&arr是arr数组本身的地址)
2.表示自身所占内存 =sizeof(arr)
(2)访问某个元素:数组名[ ][ ];
arr[1][2]; //2行3列
五、sizeof在数组中的用法
一维数组:
以arr[2]为例:
sizeof(arr) ->数组总字节数
sizeof(arr[0]) ->第一个元素字节数,或者说是单个元素的大小
而通常会看到用sizeof(arr)/sizeof(arr[0]) 表达式来计算该数组元素的个数,它的工作原理是将数组的总大小(以字节为单位)除以单个元素的大小(也以字节为单位)。这给出了数组中元素的总数。
例如,如果“arr”是一个有10个元素的整数数组,那么sizeof (arr)将返回该数组的总大小(以字节为单位)(这将取决于特定s系统中整数的大小),而sizeof(arr[0])将返回单个整数元素的大小。将这两个值除以就得到了数组中的元素个数,在本例中为10。
二维数组
以brr[2][2];为例
sizeof(brr) ->数组总字节数,即行和列元素总个数*定义类型的大小
sizeof(brr[0]) ->第一行元素的总字节数
sizeof(brr[0][0]) ->单元格类型所占字节数与一维数组arr[0]含义一致,单个元素的大小。
六、怎么遍历数组?
一维数组
int arr[4];
for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++)
{
//..
}
二维数组
int brr[n][m];//n行m列
for (int i = 0; i < sizeof(brr) / sizeof(brr[0]); i++)//遍历行
{
for (int j = 0; j < sizeof(brr[0]) / sizeof(brr[0][0]); j++)//遍历行中的每一列
{
//..
}
}
七、数组与指针的结合
一维数组
定义数组arr: int arr[n];
数组名arr = 数组首元素地址 = &arr[0]
*数组名 = 首元素的值 => *arr = arr[0];
二维数组
定义数组brr:int brr[m][n];
数组名brr = 数组首元素地址 = &brr[0][0]
*数组名 = 首元素的值 => *brr = brr[0][0] //访问第1行第1个元素的值