c语言 2021-10-22
一:一维数组
1:数组的定义
(1).数组类型 + 数组名 + [长度];
int arr[10]; //定义数组的类型为整型,数组名为arr,长度为10。
(2).数组定义时不给长度,编译器会通过赋的值推算长度是多少。
(3).数组名相关问题:
①数组名还可以表示数组首元素的地址;
int main()
{
int arr[9] = { 1,2,3,4,5,6,7,8,9 };
printf("%d %d\n", &arr, &arr[0]);
}
运行结果:
由运行结果可知 数组名可以表示数组首元素的地址
②数组名只有两种情况下表示整个数组:
在定义数组的同一个函数内,sizeof(arr),这里的arr代表整个数组
在定义数组的同一个函数内,&arr+1,这里的arr代表整个数组
2:数组的初始化
(1).寻常初始化
int brr[5]={1,2,3,4,5};//数组brr中存储1,2,3,4,5。
(2).数组只赋值一部分,剩余部分则全为0
#include<stdio.h>
int main()
{
int crr[5] = { 1,2,3 };
for (int i = 0; i < 5; i++)
{
printf("%d\t", crr[i]); // \t为中间间隔八个字节
}
}
运行结果为:
(3).数组只定义,不初始化其中的值为全部随机值(可能会出现如下的结果,这个结果就是随机值)
(4).数组赋0值的三种方法
①大括号里不写任何东西
②括号内只写一个0
③括号内将所有的值均写出来
#include<stdio.h>
int main()
{
int drr[5] = {};
int err[5] = {0};
int frr[5] = {0,0,0,0,0};
for (int i = 0; i < 5; i++)
{
printf("%d\n", drr[i]);
}
for (int j = 0; j < 5; j++)
{
printf("%d\n", drr[j]);
}
for (int k = 0; k < 5; k++)
{
printf("%d\n", drr[k]);
}
}
3:数组的访问
(1).通过下标访问
(2).数组中括号中间的值什么时候代表长度?
当数组定义的时候,中括号中间的值代表着长度,并且必须是常量。
(3).数组中括号中间的值什么时候代表着下标?
当数组使用的时候,中括号中间的值代表着下标,可以是常量,也可以是变量。
4:数组长度的求法
公式: sizeof(arr)/sizeof(arr[0])
数组整个的字节/第一个格子的字节 == 有多少个格子
注意:求数组长度公式只能用在,定义这个数组的同一个函数内部。
5: 数组越界问题
访问到不属于自己的内存,会发生数组越界,不安全。
二:二维数组
1.二维数组定义:
类型 数组名[行号][列号];
2.二维数组初始化:
二维数组默认:行优先
int arr[][4];ok 因为默认行优先,所以行号可以省略,而列号不能省
int arr[3][];//error
3.二维数组的使用:
二维数组名做函数参数传递的时候, 行信息会丢失,列信息不会丢失