目录
C数组
数组是用来存储一系列数据(一系列相同类型的变量)。所有的数组都是由连续的内存位置组成,最低的地址对应第一个元素,最高的地址对应最后一个元素。
声明数组
数据类型 数组名 [元素数量]
初始化数组
可以逐个初始化数组,也可以使用一个初始化语句。
数据类型 数组名 [元素数量(此时可省略)]={ , , , , ,}
所有的数组都是以 0 作为它们第一个元素的索引,也被称为基索引,数组的最后一个索引是数组的总大小减去 1。
访问数组元素
数据类型 变量=数组名[索引];
多维数组
数据类型 数组名 [元素数量][ 数量 ][ 数量 ][ 数量 ];
二维数组
多维数组最简单的形式是二维数组。一个二维数组,在本质上,是一个一维数组的列表。
例 声明一个x行y列的二维整型数组
int array[x][y];
初始化二维数组
多维数组可以通过在括号内为每行指定值来进行初始化。
int array[3][4]={
{0,1,2,3},
{4,5,6,7},
{8,9,10,11}
};
内部嵌套的括号是可选的。
或者
int array[3][4]={0,1,2,3,4,5,6,7,8,9,10,11};
传递数组给函数
想要在函数中传递一个一维数组作为参数,可以通过下面三种方式来声明函数形式参数。
方式一
形式参数是一个指针
void 函数名(int *param)
{
……
}
方式二
形式参数是一个已定义大小的数组
void 函数名(int param[10] )
{
……
}
方式三
形式参数是一个未定义大小的数组
void 函数名(int param[ ] )
{
……
}
从函数返回数组
C 语言不允许返回一个完整的数组作为函数的参数。但是,您可以通过指定不带索引的数组名来返回一个指向数组的指针。
如果想要从函数返回一个一维数组,需要声明一个返回指针的函数。
int *myFunction( )
{
……
}
C 不支持在函数外返回局部变量的地址,除非定义局部变量为 static 变量。
注:srand((unsigned)time(NULL))是初始化随机函数种子:
- 拿当前系统时间作为种子,由于时间是变化的,种子变化,可以产生不相同的随机数。
- 计算机中的随机数实际上都不是真正的随机数,如果两次给的种子一样,是会生成同样的随机序列的。 所以,一般都会以当前的时间作为种子来生成随机数,这样更加的随机。
- 使用时,参数可以是unsigned型的任意数据,比如srand(10);
- 如果不使用srand,用rand()产生的随机数,在多次运行,结果是一样的。
指向数组的指针
数组名是一个指向数组中第一个元素的常量指针。balance 是一个指向 &balance[0] 的指针,即数组 balance 的第一个元素的地址。
使用数组名作为常量指针是合法的,反之亦然。因此,可以用*(balance + 4) 来访问 balance[4] 数据。
在上例中,p 是一个指向 double 型的指针,可以存储一个 double 类型的变量。一旦我们有了 p 中的地址,*p 将给出存储在 p 中相应地址的值。
注:double与float的区别
- double的精度更高,储存的小数位数更多。
- 输出默认都是 6 位小数,想输出更多小数可以自己控制,如 %.10lf 就能输出 10 位小数。
- 一般情况下 double 类型的占位符可以用 %lf。
小技巧
在我们没有明确数组的元素个数时,在程序中想知道数组单元个数可以使用 sizeof(a)/sizeof(a[0]), sizeof(a) 是得到数组 a 的大小,sizeof(a[0]) 是得到数组 a 中单个元素的大小(因此可以不必要是a[0],a[i]都行)。