从零开始学习C语言——数组

 2024-01-14 01:02:57  阅读 0

这里需要注意的是,如果省略了数组长度,编译器在使用计算出的长度时会报错。

数组初始化

定义变量时,我们可以定义并赋值初始值,数组也是如此,但定义和初始化数组的方式有以下几种:

1.定义并给出所有初始值

int a[3] = {1, 2, 3};
或
int a[] = {1, 2, 3};

即初始值用{}包裹,各个元素之间用逗号分隔。

对于也给出初始值的定义,我们可以省略数组长度,因为编译器会根据初始值的内容来确定数组长度。

2.定义并给出一些初始值

int a[3] = {1, 2};

此时数组长度不能省略,否则会认为数组只有两个元素。 数组a的前两个元素分别是1和2,第三个元素的值未知。

3.定义字符数组

字符数组的定义和初始值写入与其他基本类型的定义不同。

char s[6] = "hello";
char s[] = "hello";

上面两者是等价的,即定义了一个数组长度为6的字符数组。

细心的读者可能会发现,hello只有5个字符,那么为什么它有6个元素长呢?

这是因为双引号内的字符串(也是字符数组)在末尾隐式包含一个 '\0' 字符来指示字符串的结尾。 因此,该类型字符串的长度为双引号内的字符数加1。如果使用运算符计算s的长度,则返回值为6。

字符数组(无论是char还是char)有一种特殊的初始化方法——定义并清除所有数组元素值为零:

char s[100] = {0};
unsigned char us[100] = {0};

这时数组的长度就不能省略了,不仅数组的第一个元素被初始化,而且数组的所有元素值都被设置为0。

这种写法仅限于清算。 如果使用其他值,就会变成部分初始化。

数组元素

事实上,数组本质上是一个连续的内存空间,与我们变量文章中的停车场示例非常相似。

二维数组初始化c_2维数组初始化_c 二维数组初始化

事实上,数组的每个元素都是一个变量。

我们再以停车位的使用为例,看看数组元素是如何使用的。 这里,我们假设实例镜头最近的停车位位置记录为0,距离加1,并假设该行有10个停车位。

那么将这样一排停车位转换成C语言可以定义如下:

int parking_area[10];

之所以定义为整数,是因为每个车型都可以用唯一的整数来代替其名称,即车名与整数之间存在映射关系。

这时,一辆宝马驶进了第一个停车位。 我们假设宝马对应的整数是1000,那么代码可以写为:

parking_area[0] = 1000; //上面提到过第一个车位的位置为0

这里,我们使用数组下标运算符。

在本文中,数组元素是通过下标访问的。 指针对元素的访问将在后续的指针文章中讨论。

数组中下标的个数等于数组的长度,下标值从0开始依次加1,即上例中的下标为0到9。

这时,又来了一辆奔驰(对应的整数记录为1001),停在第二个车位上。 代码如下:

parking_area[1] = 1001;

如果宝马开走了(假设没有停车记录为0),那么代码可以写为:

parking_area[0] = 0;

一个可编译可运行的示例

#include 
int main(void)
{
    char a[10] = {0};
    int i;
    for (i = 0; i < sizeof(a); ++i) {
        printf("%d\n", a[i]);
    }
    return 0;
}

您可以编译并运行该示例。 这里定义了数组a,并将其所有元素清为0。然后使用数组下标配合循环语句,完成对数组元素的遍历访问。 循环的内容将在后续文章中给出。

多维数组

上面讨论的示例都涉及一维数组,即每个数组元素都是数值而不是数组。

接下来我们将介绍一些复杂的数组形式。 我们以二维数组为例进行演示。

int a[2][3];

这里我们定义一个二维数组a,它类似于一个2行3列的表格或矩阵。

对于这个二维数组,可以使用以下方法来定义同时初始化:

int a[2][3] = {{1, 2, 3}, {4, 5, 6}};
或
int a[][3] = {{1, 2, 3}, {4, 5, 6}};

可以看到,最外面的数组包含两个元素,它们是两个长度相同的一维数组。

同时,定义同时初始化时,第一维的数组长度可以省略,编译器会自动用初始值中的元素个数填充。

标签: c语言

如本站内容信息有侵犯到您的权益请联系我们删除,谢谢!!


Copyright © 2020 All Rights Reserved 京ICP5741267-1号 统计代码