C 数组


数组是用来保存同类型多个数据的容器。数组长度在数组创建时指定,之后长度不能更改。


数组中保存的数据称为元素。数组中的所有元素在内存中是连续的。

数组索引从0开始。通过数组索引访问数组中的元素。例如arr[0]表示访问数组arr的第1个元素。

创建和访问数组

有两种创建数组的方法:

  • 通过new运算符和指定数组的长度的方式。例如int arr[5];
  • 通过指定数组元素的方式。int arr[] = {1, 2, 3};

下面是创建和访问数组的例子:

#include <stdio.h>
int sum(int, int);
void plus(int *);

int main(int argc, const char * argv[]) {
    int arr[3];
    int arr2[] = {10, 11, 12};

    arr[0] = 1;
    arr[1] = 2;
    arr[2] = 3;
    for (int i = 0; i < 3; i++) {
        printf("arr[%d] : %d. \n", i, arr[i]);  // 1 2 3
    }

    for (int i = 0; i < 3; i++) {
        printf("\tarr2[%d] : %d. \n", i, arr2[i]);  // 10 11 12
    }

    return 0;
}

多维数组

多维数组指数组中元素也是数组的数组。

下面是多维数组的例子:

#include <stdio.h>
int sum(int, int);
void plus(int *);

int main(int argc, const char * argv[]) {
    int arr[][3] = { {1, 2, 3}, {10, 11, 12}};

    for (int i = 0; i < 2; i++) {
        for (int j = 0; j < 3; j++) {
            printf("arr[%d][%d] : %d. \n", i, j, arr[i][j]);  // 1 2 3 10 11 12
        }
    }

    char colors[][10] = {"red", "blue"};
    //char colors[][10] = {{'r', 'e', 'd', '\0'}, {'b', 'l', 'u', 'e', '\0'}};
    for (int i = 0; i < 2; i++) {
        printf("\tcolor[%d] : %s. \n", i, colors[i]);   // red blue
    }

    return 0;
}

在上面的例子中,字符串"red"就是个字符数组{'r', 'e', 'd'}

指针数组

指针数组是一个元素为指针的数组。

下面是指针数组的例子:

#include <stdio.h>
int main(int argc, const char * argv[]) {
    char *colors[] = {"red", "blue"};

    for (int i = 0; i < 2; i++) {
        printf("Value of colors[%d] : %p. \n", i, colors[i]); // 0x10ac61f74 0x10ac61f78
        printf("\tcolor[%d] : %s. \n", i, colors[i]);   // red blue
    }

    return 0;
}

上面例子中数组colors中第一个元素保存的是字符串"red"的地址,第二个元素保存的是字符串"blue"的地址。

命令行参数

命令行参数第一个参数argc表示参数个数,第二个参数argv是一个字符串指针数组,保存参数的地址。argv[0]是程序名。

下面是命令行参数的例子:

#include <stdio.h>
int main(int argc, const char * argv[]) {
    for (int i = 1; i < argc; i++) {
        printf("argv[%d] : %s \n", i, argv[i]);  // hello world
    }

    return 0;
}

在上面的例子中,使用命令gcc -o a arr_cmdline.c编译程序,运行命令./a hello world,得到运行结果。