0
点赞
收藏
分享

微信扫一扫

C语言学习记录(九)

得一道人 2023-11-10 阅读 48

一维数组

声明数组时要遵循以下规则: (1)数组名的命名规则和变量名的相同,即遵循标识符命名规则。 (2)在定义数组时,需要指定数组中元素的个数,方括号中的常量表达式用来表示元素的 个数,即数组长度。 (3)常量表达式中可以包含常量和符号常量,但不能包含变量。也就是说,C 语言不允许 对数组的大小做动态定义,即数组的大小不依赖于程序运行过程中变量的值

#include <stdio.h>

int main()
{
    int a[20];
    // 数据个数已经确定,可以不指定数组长度
    int b[] = {1, 2, 3, 4, 5, 6};
    // 可以只给一部分元素赋值
    int c[20] = {0, 1, 2, 3, 4, 5};

    return 0;
}

数组的访问越界

编译器并不检查程序对数组下标的引用是否在数组的合法范围内。

#include <stdio.h>
void access_out_of_bounds();

int main()
{
    access_out_of_bounds();

    return 0;
}

void access_out_of_bounds()
{
    int a[5] = {1, 2, 3, 4, 5};
    int j = 20;
    int i = 10;
    a[5] = 6;            // 越界访问
    a[6] = 7;            // 越界访问会造成数据异常
    printf("i=%d\n", i); // i 发生改变
}

数组的传递

一维数组在传递时,其长度是传递不过去的,所以我们通过 len 来传递数组中的元素个数。实际数组名中存储的是数组的首地址,在调用函数传递时,是将数组的首地址给了变量 b(其实变量 b 是指针类型),在 b[]的方括号中填写任何数字都是没有意义的。

#include <stdio.h>

void array_transmit();
void print(int b[], int len);

int main()
{

    array_transmit();

    return 0;
}
void array_transmit()
{
    int a[5] = {1, 2, 3, 4, 5};
    print(a, 5);
    printf("a[4]=%d\n", a[4]);
}

// 子函数的形参接收到是数组的起始地址,因此不能把数组的长度传递给子函数
// C 语言的函数调用方式是值传递
void print(int b[], int len)
{
    int i;
    for (i = 0; i < len; i++)
    {
        printf("%3d", b[i]);
    }
    b[4] = 20; // 在子函数中修改数组元素
    printf("\n");
}

举报

相关推荐

0 条评论