C语言数组学习

103 阅读2分钟

在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 函数。

在这里,我们有必要先讲述一下字符数组与字符串的关系。

一般而言,普通的字符串,就是一个一维的字符数组,而由于’字符-数字’的对应关系,我们完全可以将普通的字符串,当作一个一维的整数数组。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1rhkVDIW-1683189858749)(https://foruda.gitee.com/images/1677934223644139674/79ee5274_871414.png "1672992151504.png")]

(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,代表每个参数地具体内容

学习一门知识地最好方法,就是动手实践,我们也写出与之配套的程序。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9bkiEPkZ-1683189858750)(https://foruda.gitee.com/images/1677934244426081543/11b47070_871414.png "1672994821195.png")]

/*
    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 函数的参数,就是这些外部输入的数据,基于此,我们可以制作一些灵活地小程序。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gM25liIn-1683189858751)(https://foruda.gitee.com/images/1677934256788942177/c52cb2af_871414.png "1672995000297.png")]

/*
    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;
}

多维数组的使用方式,也大差不差。

不过由于我们当下的阶段,我们暂时还不能发掘出他们真正的奥妙,这没有什么,万事功到自然成。