C语言之“二维数组”

二维数组是指包含多个一维数组的数组,也可以看作是一个表格或矩阵。在C语言中,我们可以通过使用数组的数组来创建二维数组。二维数组的元素可以通过两个索引来访问,分别表示行索引和列索引。

    如:

#include <stdio.h>

int main() {
    int matrix[3][4] = {
        {1, 2, 3, 4},
        {5, 6, 7, 8},
        {9, 10, 11, 12}
    };

    // 访问和打印二维数组的元素
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 4; j++) {
            printf("%d ", matrix[i][j]);
        }
        printf("\n");
    }

    return 0;
}

输出:

1 2 3 4

5 6 7 8

9 10 11 12

这样就定义了 一个3行4列的二维数组。

但请注意 行索引和列索引的范围分别是从0到行-1和从0到列-1,也就是从a[0][0]

二维数组的初始化:

   

在 C 语言中,二维数组的初始化可以通过多种方式进行,具体取决于你想要的初始值和数组的维度。下面列举了几种常见的二维数组初始化方法:

1. **指定全部元素的初始值**:
   可以在声明二维数组的同时指定每个元素的初始值,使用嵌套的花括号 `{}` 表示每行的元素。如果部分元素没有指定初始值,则默认为0。
int arr[3][4] = {
    {1, 2, 3, 4},
    {5, 6, 7, 8},
    {9, 10, 11, 12}
};

2. **部分元素的初始值**:
   如果只想初始化部分元素,可以省略指定的行或列的大小,并只在初始化部分指定元素的初始值。
int arr[3][4] = {
    {1, 2, 3, 4},
    {5, 6, 7}, // 第二行只初始化了3个元素,第四个元素默认为0
    {9, 10} // 第三行只初始化了2个元素,第三和第四个元素默认为0
};

3. **指定部分行的初始值**:
   可以只对部分行进行初始化,其余行会被自动初始化为0。
int arr[3][4] = {
    {1, 2, 3, 4},
    {5, 6, 7, 8}
    // 第三行没有初始化,全部元素默认为0
};

4. **动态初始化**:
   可以在运行时根据需要动态地为二维数组的元素赋值。
int rows = 3;
int cols = 4;
int arr[rows][cols];

for (int i = 0; i < rows; i++) {
    for (int j = 0; j < cols; j++) {
        arr[i][j] = i * cols + j + 1;
    }
}

注意

在 C 语言中,`int arr[3][]` 和 `int arr1[][3]` 这两种声明方式都是非法的,会导致编译错误。

1. `int arr[3][]`:
   这种声明方式是非法的,因为在声明多维数组时,必须指定每一维的大小。在这个声明中,第二维的大小没有被指定,导致编译器无法确定数组的完整维数和大小。修正该错误需要指定第二维的大小,例如 `int arr[3][4]` 表示一个3行4列的二维数组。

2. `int arr1[][3]`:
   这种声明方式是合法的,但在这种情况下,第一维的大小是不确定的,编译器会根据初始化时的元素个数来推断数组的大小。例如,`int arr1[][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}` 表示一个3行3列的二维数组。第一维的大小为3,由初始化时的行数决定,第二维的大小为3,由初始化时的列数决定。

需要注意的是,C 语言中多维数组的每一维大小必须是常量,不可在运行时动态改变。如果需要在运行时动态确定多维数组的大小,可以考虑使用动态内存分配(如 `malloc()` 函数)来创建多维数组。

例如,可以使用以下方式来动态创建一个3行4列的二维整数数组:
#include <stdio.h>
#include <stdlib.h>

int main() {
    int rows = 3;
    int cols = 4;

    int** arr = (int**)malloc(rows * sizeof(int*));
    for (int i = 0; i < rows; i++) {
        arr[i] = (int*)malloc(cols * sizeof(int));
    }

    // 现在可以使用 arr[i][j] 来访问和操作二维数组的元素

    // 使用完数组后,别忘记释放动态分配的内存
    for (int i = 0; i < rows; i++) {
        free(arr[i]);
    }
    free(arr);

    return 0;
}

上述代码使用了动态内存分配来创建一个3行4列的二维整数数组。动态内存分配可以在运行时根据需要确定数组的大小,但需要注意释放内存以避免内存泄漏。

整型二维数组的数组名和首元素

  

arr向下移动1:48个字节

arr[0]向下移动1:16个字节

Arr[0][0]向下移动1:4个字节

例题有 杨辉三角  二维数组排序。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值