C语言第六讲,数组
一丶什么是数组
数组,就是一整块的连续内存空间.
且类型都是一样的.大小一样
比如:
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"); }
输出结果.
高维数组则一样,不过一般用不到高维数组.