关于数组的学习
1、数组的创建
type arr_name[常量值]
type 是指数组的类型,arr_name是指自己创建的数组的名字,常量值可以指定数组的大小。
如:int arr[10] = {0};
char arr[10] = {0};
double arr[10] = {0};
2、数组的初始化
int arr[10] = {1,2,3,4,5,6,7,8,9,10};//这种初始化称为完全初始化
int arr[5] = {1};//这是不完全初始化,第一个是1,其余的数字默认全部为0
int arr[3] = {1,2,3,4,5};//初始化太多,错误写法
3.数组的下标
c语言规定数组下标是从0开始的,依次递增
比如arr[10] = {1,2,3,4,5,6,7,8,9,10};
其对应下标是 0,1,2,3,4,5,6,7,8,9
我们可以使用下标来访问数组
比如
#include<stdio.h>
int main(){
int arr[10] = {1,2,3,4,5,6,7,8,9,10};
printf("%d",arr[1]);//结果是2
return 0;
}
4.数组元素的打印
数组的打印一般要用到for循环,如:
#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<10; i++)
{
printf("%d ", arr[i]);
}
return 0;
}
5.同样,输入数组元素也可以用到for循环
#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<10; i++)
{
scanf("%d", &arr[i]);
}
for(i=0; i<10; i++)
{
printf("%d ", arr[i]);
}
return 0;
}
6.关于一维数组在数组当中的存储
如果我们定义一个整形的数组,通过查询其地址可以发现,相邻两个数组元素的地址相差4,1个整形是4个字节,所以,数组在内存当中是连续存放的
7.利用sizeof计算数组元素的个数
这种方法的原理是:先计算出整个数组所占字节大小,再除以一个数组元素所占字节大小,所得的值当然就是数组元素的个数,例如:
#include <stido.h>
int main()
{
int arr[10] = {0};
int sz = sizeof(arr)/sizeof(arr[0]);
printf("%d\n", sz);
return 0;
}
8、二维数组的创建
比如:
int arr[5][5];
double arr[10][5];
我们将这种二维数组归为一种统一的格式:
type arr_name[常量值1][常量值2];
常量值1代表数组的行数
常量值2代表数组的列数
9、二维数组的初始化
int arr[3][5] = {1,2};//不完全初始化
int arr[3][5] = {1,2,3,4,5, 2,3,4,5,6, 3,4,5,6,7};//完全初始化
也可以按照行列初始化
int arr[3][5] = {{1,2},{3,4},{5,6}};
这样写的第一排前两个是1 2其余的全是0
第二排前两个是3 4 其余全是0
第三排前两个是5 6 其余全是0
10、关于二维数组的省略写法
只能省略行,不能省略列!!
11、二维数组的使用
也是通过下标来访问的,举个例子:
#include <stdio.h>
int main()
{
int arr[3][5] = {1,2,3,4,5, 2,3,4,5,6, 3,4,5,6,7};
printf("%d\n", arr[2][4]);//结果是7
return 0;
}
12、二维数组的输入输出是通过两个分别的嵌套的for循环来输出的
举个例子:
#include <stdio.h>
int main()
{
int arr[3][5] = {1,2,3,4,5, 2,3,4,5,6, 3,4,5,6,7};
int i = 0;//遍历⾏
//输⼊
for(i=0; i<3; i++) //产⽣⾏号
{
int j = 0;
for(j=0; j<5; j++) //产⽣列号
{
scanf("%d", &arr[i][j]); //输⼊数据
}
}
//输出
for(i=0; i<3; i++) //产⽣⾏号
{
int j = 0;
for(j=0; j<5; j++) //产⽣列号
{
printf("%d ", arr[i][j]); //输出数据
}
printf("\n");
}
return 0;
}
13、二维数组在内存当中的存储
和一维数组的道理几乎相同;二维数组的地址也是连续的,之不过二维数组第一排最后一个访问完之后访问到下一排的第一个元素,这两个元素的地址是连续的,依次类推。
14、c99当中的变长数组
即可以使用变量来指定数组的大小
例如:
#include <stdio.h>
int main()
{
int n = 0;
scanf("%d", &n);//根据输⼊数值确定数组的⼤⼩
int arr[n];
int i = 0;
for (i = 0; i < n; i++)
{
scanf("%d", &arr[i]);
}
for (i = 0; i < n; i++)
{
printf("%d ", arr[i]);
}
return 0;
}