从头学习C语言之二维数组

yizhihongxing

让我来详细讲解一下从头学习C语言之二维数组的完整攻略。

什么是二维数组?

在开始讲解二维数组之前,我们先来回顾一下什么是一维数组。一维数组是相同类型元素的集合,元素在内存中是连续分配的。类似于一排柜子,每个柜子可以存放一个元素。而二维数组,就是由一系列的一维数组组成的。我们可以将二维数组看作是一个由行和列组成的表格,其中每个元素都有一个对应的行和列。在内存中,二维数组的元素是按行排列的。类似于一个存放物品的仓库,每个仓位可以存放一个元素,而这些仓位按照“行”和“列”排列。

声明和初始化二维数组

C语言中,声明和初始化一个二维数组的方式如下:

data_type array_name[row_size][column_size];

其中,data_type表示数组中元素的类型,array_name表示数组的名字,row_size是二维数组中行的数量,column_size是二维数组中列的数量。

例如,声明一个3行4列的整型数组,可以写成:

int arr[3][4];

二维数组的初始化可以分为两种方式,静态初始化和动态初始化。静态初始化是指在定义数组时直接给出数组中的元素值。动态初始化是指在定义数组时不给出元素值,而是在程序运行时通过代码为数组元素赋值。

静态初始化

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

以上代码定义了一个3行4列的整型数组,并将其初始化为一个3行4列的矩阵,元素的值分别是1到12。

动态初始化

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

以上代码定义了一个3行4列的整型数组,并通过循环为其赋值,元素的值分别是1到12。

二维数组的遍历

对于二维数组,我们通常需要使用嵌套循环来遍历它。其中外层循环控制行数,内层循环控制列数。

int arr[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 ", arr[i][j]);
    }
    printf("\n");
}

以上代码遍历输出了一个3行4列的整型数组。

二维数组作为函数参数

在C语言中,将二维数组作为函数参数进行传递有两种方式:指向二维数组的指针和二维数组。使用指针作为函数参数更常见,因为指针允许数组大小动态改变。

指向二维数组的指针

void print_arr(int (*arr)[4], int row_size){
    for(int i = 0; i < row_size; i++){
        for(int j = 0; j < 4; j++){
            printf("%d ", arr[i][j]);
        }
        printf("\n");
    }
}

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

以上代码将一个二维数组作为函数参数进行传递,并打印出了数组的所有元素。

二维数组

void print_arr(int arr[][4], int row_size){
    for(int i = 0; i < row_size; i++){
        for(int j = 0; j < 4; j++){
            printf("%d ", arr[i][j]);
        }
        printf("\n");
    }
}

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

以上代码也将一个二维数组作为函数参数进行传递,并打印出了数组的所有元素。需要注意的是,在这种方式下只能省略第一维的大小,其他维度的大小不能省略。

示例说明

示例一

假设有一个5行6列的矩阵,其每个元素都是由用户输入得到的数值,现在我们需要对这个矩阵进行求和操作。

#include <stdio.h>

int main(){
    int arr[5][6];
    int sum = 0;

    printf("请输入一个5行6列的矩阵:\n");
    for(int i = 0; i < 5; i++){
        for(int j = 0; j < 6; j++){
            scanf("%d", &arr[i][j]);
        }
    }

    for(int i = 0; i < 5; i++){
        for(int j = 0; j < 6; j++){
            sum += arr[i][j];
        }
    }

    printf("矩阵元素的和为:%d\n", sum);

    return 0;
}

以上代码通过两层嵌套的循环遍历每个元素并求和,最后输出结果。

示例二

假设有一个3行3列的矩阵,现在我们要将其中的每个元素都增加1。

#include <stdio.h>

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

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

    return 0;
}

以上代码通过两层嵌套的循环遍历每个元素并增加1,最后输出结果。需要注意的是,由于本示例只是为了演示数组的修改操作,因此并没有使用用户输入来实现矩阵的初始化。在实际开发中,我们需要根据具体需求使用适当的方式为数组进行初始化。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:从头学习C语言之二维数组 - Python技术站

(0)
上一篇 2023年6月25日
下一篇 2023年6月25日

相关文章

  • 如何重设/清除/删除neo4j数据库?

    已经回答了您的问题,请查看上面的回答。如果您有任何其他问题或需要进一步的帮助,请告诉我。

    other 2023年5月7日
    00
  • 提升JavaScript加载速度的10种方式

    提升JavaScript加载速度的十种方式 JavaScript是现代网站开发过程中最重要的语言之一,但是在一个网站中,JavaScript文件的体积通常很大,它们下载的时间可能会影响用户的体验。因此,在理想情况下,JavaScript文件应该尽可能的快速下载和执行。在本文中,我们将分享提升JavaScript加载速度的十种方法。 1. 使用CDN 使用CD…

    other 2023年6月25日
    00
  • javascript基础语法——全面理解变量和标识符

    JavaScript基础语法——全面理解变量和标识符 1. 变量和标识符的概念 在JavaScript中,变量是用于存储数据的容器,而标识符则是用于命名变量的名称。标识符可以是任何由字母、数字、下划线(_)和美元符号($)组成的序列,但必须以字母、下划线或美元符号开头。标识符是区分大小写的,因此myVariable和myvariable是不同的变量。 2. …

    other 2023年8月9日
    00
  • linux系统怎么重启网卡?linux重启网卡的三种教程

    针对你的问题,我将提供如下完整攻略,主要分为以下三部分: 大致介绍linux系统中网卡的作用及如何重启网卡。 介绍Linux系统下重启网卡的三种教程,分别是ifdown/ifup,service方式以及systemd-networkd方式。 举两个实际操作的示例说明。 一、网卡的作用及如何重启网卡 网卡是Linux系统中用来连接互联网或局域网的硬件设备,在L…

    other 2023年6月26日
    00
  • tomcat如何禁止显示目录和文件列表

    Tomcat如何禁止显示目录和文件列表 Tomcat是一个使用广泛的Java Web服务器,但默认情况下在web.xml文件未配置时,Tomcat允许用户请求目录并显示该目录下的文件列表。 这可能会导致访问者获得有关站点结构和文件的敏感信息。因此,在保护Web服务器的机密性和安全性方面,禁止显示文件和目录列表是一个很好的实践。 方式一:禁用自动部署 在自动部…

    其他 2023年3月29日
    00
  • git切换远程分支

    下面是关于如何切换远程分支的详细攻略。 1. 查看远程分支 在切换远程分支之前,需要先查看已有的远程分支。可以使用以下命令查看: git branch -r 其中,”r”代表”remote”,表示查看远程分支。执行该命令后,会列出当前仓库连接的所有远程分支。 2. 切换远程分支 在上一步中查看到远程分支之后,就可以使用以下命令来切换到需要操作的远程分支: g…

    其他 2023年4月16日
    00
  • Lua中table的几种构造方式详解

    Lua中table的几种构造方式详解 在Lua中,table是一种非常重要的数据结构,它可以用来存储和组织数据。Lua中有多种构造table的方式,下面将详细介绍这些方式。 1. 使用花括号{}构造table 最常见的构造table的方式是使用花括号{}。在花括号中,可以使用键值对的形式来初始化table。键值对之间使用逗号分隔,键和值之间使用等号或冒号分隔…

    other 2023年8月6日
    00
  • asp.net三种方法实现事务

    ASP.NET是一种基于Microsoft .NET框架的Web应用程序开发技术。在ASP.NET中,事务是一种用于确保数据一致性和完整性的重要机制。本文将详细讲解ASP.NET中三种方法实现事务的完整攻略,并提供两个示例说明。 三种方法 在ASP.NET中,实现事务的三种方法分别是:ADO.NET事务、Enterprise Services事务和Trans…

    other 2023年5月5日
    00
合作推广
合作推广
分享本页
返回顶部