数组,就是一整块的连续内存空间.
且类型都是一样的.大小一样
比如:
1.1数组元素的访问
我们要访问数组,例如上面,我们访问元算2,元素3等等怎么访问..
比如有一个数组为:
int Arry[3] = {1,2,3}; //数组定义初始化.
Arry[0] = 1;
Arry[1] = 2; //数组的访问
......
利用下标来进行访问.
利用程序来进行访问
int Ary[10] = { 0 };
for (int i = 0; i < 10; i++)
{
printf("%d\r\n",i);
}
动态的大小识别.
int Ary[10] = { 0 };
for (int i = 0; i < sizeof(Ary)/sizeof(Ary[0]); i++)
{
printf("%d\r\n",i);
}
这里用到了一个关键字,Sizeof, sizeof关键字是求大小的关键字. 例如我们求数组的总大小. 然后 利用总大小 除以数组元素个数的大小. 就得出来了数组的个数.
1.2一维数组的声明
在C语言中,或者C++语言中,我们要声明数组. 不用考虑在哪里开辟,开辟多大的问题,只需要你给我一个大小.我编译器自动的来进行开辟内存空间供你使用.
类型 数组名[数组元素的个数]
例如:
int Ary[3]; //定义一个Ary的数组,有3个元素.
注意,声明的时候是个数.也就是说数组有3个元素. 但是访问的时候是下表.从0开始访问
例如:
ary[0] = 1;
ary[1] = 2;
ary[2] = 3;
总共有三个.
声明的时候则是告诉编译器, 我声明的类型是 int类型,数组名字数Ary,个数是3个. 那么这个数组所占的内存空间则是 3 * 4 = 12个字节大小.
公式计算:
3(数组元素个数) * 类型 = 内存空间所占大小.
1.3数组应该注意的问题.
在C语言中,数组的声明不支持动态声明.
什么意思?
也就是说,你需要给定我个数.我来进行申请.但是你不能把这个个数给一个变量保存.让我跟随变量来申请.
例如:
int nCount = 10;
int Ary[nCount]; //错误的
数组的定义可以和普通成员变量的定义放在一起.
例如:
int A, ary[5],b;
上面我们虽然定义了数组.但是并没有仔细讲解数组的初始化
数组的初始化常用的有三种.
第一种, 大括号初始化.
int Ary[3] = { 1, 2 ,3}; //数组中的元素1,元素2,元素三分别初始化为了1,2,3
第二种.全部初始化.
int Ary[3] = {0}; //数组的每个元素全部初始化为了0
第三种,不确定个数的初始化.
int Ary[] = { 1, 2, 3} ;//有的时候你并不知道你的数组有多大. 但是又不用动态的申请空间.
所以这样写会默认有3个元素.
有的时候一维数组并不能满足我们的需求.
这个是否就需要更高维的数组了.
例如:
int Ary[2][2]; 定义二维数组
这样则声明了一个二维数组. 代表我们申请了 2行 2列的数组. 大小是 2*2的矩阵.
这几个元素分别是:
Ary[0][0] Ary[0][1]
Ary[1][0] Ary[1][1]
二维数组的定义初始化.
int nNum[2][2] = {{0,1},{2,3}}; 使用两个括号即可.
二维数组对部分元素进行初始化.
int nNum[2][2] = {{1},{0}};
二维数组的访问
二维数组本质是一维数组.但是为了理解.所以说成是二维数组.
我们利用程序来对其进行访问.
二维数组初始化
int Ary[3][4] = {0};
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 4; j++)
{
Ary[i][j] = i + j; //重要语句. i是行,j是列
}
}
二维数组输出
for (int i = 0; i < 3; i++ )
{
for (int j = 0; j < 4; j++)
{
printf(" %d", Ary[i][j]);
}
puts("\r\n");
}
输出结果.
高维数组则一样,不过一般用不到高维数组.