来详细的讲解数组问题
数组目录
一、数组的创建与初始化
使用数组时最好初始化,不然遇到特定问题编译器会出错
先来了解简单数组的组成。
一个数组是由数组类型跟数组名与数组大小组成。
1.初识数组
//初识数组
int arr[10];//int 数组类型 arr数组名 [10]数组大小
int arr[10]={0}; //数组初始化是={0}
2.数组初始化
我现在知道的有两种数组初始化的方法。
int arr[10]; //第一种适合指定的数组大小使用
int arr[]; //第二种适合没有指定的大小使用
在补充说明一下char类型里的字符是根据ASCII码值赋值
//在ASCII码值里98是b
char arr2[3] = {'a',98, 'c'}; //对ASCII码值了解可以直接用ASCII码值代替数
一、一维数组与二维数组的使用与区别
二、一维数组
1.一维数组的创建
补充知识点:数组的存储是连续的由低到高
int arr[10]={1,2,3,4,5,6,7,8,9,10}; //这是一维数组,在描述一行元素中使用
2.一维数组的具体使用方法
#include <stdio.h>
int main()
{
int arr[10] = {0};//数组的不完全初始化
//计算数组的元素个数
int sz = sizeof(arr)/sizeof(arr[0]);
//对数组内容赋值,数组是使用下标来访问的,下标从0开始。
int i = 0;//做下标
for(i=0; i<10; i++)
{
arr[i] = i;
}
//输出数组的内容
for(i=0; i<10; ++i)
{
printf("%d ", arr[i]);
}
return 0;
}
二、二维数组
1、二维数组的创建
二数组的创建有两种方法
//数组创建
//方法一
int arr[4][5];
char arr[3][5];
double arr[4][4];
//方法二,可省略二维数组的行,不能省略数组列
int arr[][4];
char arr[][3];
double arr[][5];
说明:因为数组是连续存放的,在把一行数组存放完后,然后会到下一列下一行。要是省略了列在存放完第一行最后一个元素后,就会不知道下一列有多少列,元素就不知道该放在那里,之后就会报错。
2、二维数组的使用
#include <stdio.h>
//二数组的赋值方法有两种
int arr[4][5]={{1,2,3,4},{2,3,4,5},{3,4,5,6},{4,5,6,7}}; //数组没放满后面会默认补0
int arr2[4][5]={1,2,3,4,5,6,7,8}; //根据数组是连续存放的原理,等一行放完之后会自动放到第二列
二维数组的具体使用
int main()
{
int arr[3][4] = {0};
int i = 0;
for(i=0; i<3; i++) //行遍历
{
int j=0;
for(j=0; j<4; j++) //列遍历
{
arr[i][j] = i*4+j;
}
}
//输出
for(i=0; i<3; i++)
{
int j = 0;
for(j=0; j<4; j++)
{
printf("%d ", arr[i][j]);
}
}
return 0;
}
三、数组的越界
数组的下标是有范围限制的。 数组的下规定是从0开始的,如果数组有n个元素,最后一个元素的下标就是n-1。
所以数组的下标如果小于0,或者大于n-1,就是数组越界访问了,超出了数组合法空间的访问。
C语言本身是不做数组下标的越界检查,编译器也不一定报错,但是编译器不报错,并不意味着程序就 是正确的,
所以程序员写代码时,最好自己做越界的检查
说明:超过了数组下标输出的会是随机值
四、数组补充知识
数组名就是数值元素首地址
void a(int arr)
{
}
int main()
{
int arr[10]={1,2,3,4,5,6,7,8,9}
a(arr); //a是函数,传给a函数的是arr数组的元素首地址
//有两种例外
//第一种在sizeof内部的是整个数组的大小
sizeof(arr)
//第二种
&arr //&是整个数组的地址
}
总结
数组名就是数组首元素地址,在sizeof()内部是整个数组大小,在补充一点sizeof是操作符不是函数
有写的不好的地方还请大佬指正。