C数组
- 固定长度
- 相同类型元素
- 顺序集合
- 内存连续
初始化数组
// 定义数组并初始化
double balance[5] = {1000.0, 2.0, 3.4, 7.0, 50.0};
// 如果省略了数组大小,数组大小则初始化为元素个数,它与前一个实例创建的数组完全相同
double balance[] = {1000.0, 2.0, 3.4, 7.0, 50.0};
// 对第五个元素赋值
balance[4] = 50.0;
所有的数组都是以 0 作为它们第一个元素的索引,也被称为基索引,数组的最后一个索引是数组的总大小减去 1。
访问数组元素
#include <stdio.h>
int main()
{
int n[10];
int i, j;
for(i=0; i<10; i++)
{
n[i] = i + 100; //逐一赋值
}
for(j=1; j<10; j++)
{
printf("Element[%d]=%d\n", j, n[j]); // 逐一打印
}
return 0;
}
output:
Element[1]=101
Element[2]=102
Element[3]=103
Element[4]=104
Element[5]=105
Element[6]=106
Element[7]=107
Element[8]=108
Element[9]=109
多维数组
多维数组声明一般形式如下:
type name[size1][size2][size3]...[sizeN];
int a[3][4] = {
{1, 2, 3, 4},
{4, 5, 6, 7},
{7, 8, 9, 10}};
// 内部嵌套的括号可以省略
int a[3][4] = {
1, 2, 3, 4,
4, 5, 6, 7,
7, 8, 9, 10};
二维数组的访问
#include <stdio.h>
int main ()
{
/* 一个带有 5 行 2 列的数组 */
int a[5][2] = { {0,0}, {1,2}, {2,4}, {3,6},{4,8}};
int i, j;
/* 输出数组中每个元素的值 */
for ( i = 0; i < 5; i++ )
{
for ( j = 0; j < 2; j++ )
{
printf("a[%d][%d] = %d\n", i,j, a[i][j] );
}
}
return 0;
}
output:
a[0][0] = 0
a[0][1] = 0
a[1][0] = 1
a[1][1] = 2
a[2][0] = 2
a[2][1] = 4
a[3][0] = 3
a[3][1] = 6
a[4][0] = 4
a[4][1] = 8
传递数组给函数
必须以下面三种方式来声明函数形式参数,每种方式都会告诉编译器将要接收一个整型指针
// 方式1:形参是个指针
void myFunction(int *param);
// 方式2:形参是个已定义大小的数组
void myFunction(int param[10]);
// 方式3: 形参是个未定义大小的数组
void myFunction(int param[]);
从函数返回数组
- C 语言不允许返回一个数组作为函数的参数,可以返回一个指向数组的指针
- 另外,C 不支持在函数外返回局部变量的地址,除非定义局部变量为 static 变量。
生成随机数组的例子:
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
int *getRand();
int main()
{
int i;
int *p; //定义整型指针接收数组地址
p = getRand(); //调用时不写函数类型
for(i=0; i<10; i++)
{
printf("*(p+%d): %d\n", i, p[i]); // p[i]或者*(p+i)
}
return 0;
}
int *getRand()
{
int i;
static int arr[10]; // static修饰局部变量才允许返回地址
srand((unsigned)time(NULL)); // 初始化随机函数种子
for(i=0; i<10; i++)
{
arr[i] = rand();
printf("arr[%d] = %d\n", i, arr[i]);
}
printf("\n");
return arr;
}