在C语言中,数组用于处理一组紧密关联的数据。
一维数组
数组的语法规定如下
type varname[count_of_element]
学习一门技术的最好办法,就是动手实践,下面,我们会提供数个案例进行思考。
/*
array.c
Use the array to solve the problem
BeginnerC
*/
#include <stdio.h>
int main()
{
int array[10] = {};
array[0] = 256;
printf("%d\n", array[0]);
return 0;
}
在这个案例之中,我们声明了一个 容量为 10 的数组,并对数组中的第一号元素展开赋值。
可以发现:
- 数组中的各个元素 都属于同一类型
- 数组的下标从 0 开始
- 数组初始化可以采用 {} 方式,这意味着所有元素的初始值为0
事实上,上述程序可以改写为如下形式
/*
array_2.c
Use the array to solve the problem
BeginnerC
*/
#include <stdio.h>
int main()
{
int array[10] = {256, 255, 254};
printf("%d %d\n", array[0], array[2]);
return 0;
}
在这一案例中,我们同时初始化了三个元素,并输出了第一号元素和第三号元素的数值。
这种只有一个维度的数组,被称为“一维数组",事实上,C语言存在着多维数组。
多维数组
最明显的多维数组,就是具有参数的 main 函数。
在这里,我们有必要先讲述一下字符数组与字符串的关系。
一般而言,普通的字符串,就是一个一维的字符数组,而由于’字符-数字’的对应关系,我们完全可以将普通的字符串,当作一个一维的整数数组。
(C语言中一般 char 字符的“数字-字符“对应关系,被称为 Ascil 表,图片来自于 Bing)
我们写出案例程序如下:
/*
char_array.c
Use the char array to solve the problem
BeginnerC
*/
#include <stdio.h>
int main()
{
char string[] = "Hello World";
for (int i = 0;i < sizeof(string);i++)
{
printf("%d ", string[i]);
}
puts("");
for (int i = 0;i < sizeof(string);i++)
{
printf("%c ", string[i]);
}
puts("");
return 0;
}
在这个程序中,我们很清晰地展现出了字符流与数字流的关系。
那么接下来,我们继续关注 main 函数
main 的参数形式是如下
int main(int argc, char* argv[])
第一个 argc,代表有多少个参数,第二个 argv,代表每个参数地具体内容
学习一门知识地最好方法,就是动手实践,我们也写出与之配套的程序。
/*
main_argument.c
Use the main argument
BeginnerC
*/
#include <stdio.h>
int main(int argc, char* argv[])
{
for (int i = 0;i < argc;i++)
{
puts(argv[i]);
}
return 0;
}
可以看出,main 函数的参数,就是这些外部输入的数据,基于此,我们可以制作一些灵活地小程序。
/*
main_calc.c
Use the main arguemnt to solve the problem
BeginnerC
*/
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
double sum = 0;
for (int i = 1;i < argc;i++)
{
sum += atof(argv[i]);
}
printf("Sum: %lf\n", sum);
return 0;
}
在这里,我们用 atof 函数(这个函数负责将字符串转换为小数)与循环语句实现了一个简单的计算器。
main 函数的参数问题是讲述二维数组等多维数组最好的案例之一,除此之外,我们可以想到,矩阵。
假定我们需要描述这么一个 2 * 2 的矩阵,就可以使用如下的形式
/*
array_mutex.c
Use the array to solve the problem
BeginnerC
*/
#include <stdio.h>
int main()
{
int mutex[2][2] = {{2, 2}, {2, 2}};
for (int i = 0;i < 2;i++)
{
for (int j = 0;j < 2;j++)
{
printf("%d ", mutex[i][j]);
}
puts("");
}
return 0;
}
多维数组的使用方式,也大差不差。
不过由于我们当下的阶段,我们暂时还不能发掘出他们真正的奥妙,这没有什么,万事功到自然成。