C语言-数组



4 数组


4.0 概述
C的数组,是存储固定数量的按顺序排列的同种类型的数据容器


数组的构成
类型,变量名称,数组长度,初始化成员
如:
int arrName[5] = {1,2,3,4,5};




4.1 数组的定义
int arrNum[5];
//定义一个5个int的数组普通做法
//数组中的内容是随机的,根据当前内存中的内容会有不一样的值


int arrNum2[] = { 1, 2 };
//不明确指定数组长度,但是编译器会根据{}里面的数量来确定


int arrNum3[3] = { 1 };
//定义一个3个元素的数组,只指定第一个元素的值,其它为未初始化(一般来说会是0,但不可依赖于这个假设)


FILE arrUserType[6];
//用户自定义类型的数组,


int arr2d[2][3] = { { 1, 2, 3 }, { 4, 5, 6 } };
//定义二维数组,定初始化所有元素


int arr2d1[2][3] = { 1, 2, 3, 4, 5, 6 };
//从这个初始化表明二维数组和的排列是顺序的


int arr2d2[2][3] = { 1 };
//只初始化一个元素,arr2d2[0][0]


int arr2d3[2][3] = { { 1, 2 }, { 4, 5 } };
//此二维中每个二级数组只初始化前两个元素


int arr2d4[2][3] = { { 1, 2 } };
//只初始化第一个二级数组中的前两个成员


int arr2d5[][3] = { { 1, 2, 3 }, { 2,3,4} };
//不批定第一个索引,编译器自己计算


4.2 数组的长度
int iLen = 5;
int arr11[iLen];//无法通过编译,因为数组长员只能使用常量


const int iLenConst = 5;
int arr12[iLenConst];


4.3 数组的越界
C语言的数组是定长的,
假设长度是N,那最大的可用索引是N-1
如int arrNum[3];
使用数组中最后一个元素的方式是arrNum[2];


对于N-1,这个-1常常是被忽略的错误


数组越界后,程序并不会立即崩溃
但引发的问题是不可预估的
因为你引用了未知的内存


int arrNum[5] = {0};
printf("out of range:arrNum[5]=%d\n",arrNum[5]);
arrNum[5] = 1;


4.4长度为0的数组(黑科技)


有时候会定义长度为0的数组
一般出现在结构体的尾部
这是用于使用一个变长的缓冲区
利用于数组越界访问不会出错这个特性


int arrZero[0];//单


struct tagMyTrailArr{
int iNum;
int arrZero[0];//在结构体中可以定义长度为0的数组
}MyTrailArr;


不建议主动在项目中使用此技术


4.5数组的遍历




//遍历一维数组
int arrNum[5];
int arr2d[2][3];
for (i = 0; i < 5; i++){
arrNum[i] = 0;
}


//使用二级循环遍历二维数组
for (i = 0; i < 2; i++){
for (j = 0; j < 3; j++){
arr2d[i][j] = 0;
}
}


//使用指针可以用一个循环遍历二维数组
int arr2d[2][3];
int * pArr2d = (int*)arr2d;
for (i = 0; i < 2*3; i++){
pArr2d[i] = 8;
}


printf("element in arr2d:%d\n", arr2d[1][2]);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值