C语言二维数组指针的概念及使用

当我们把一维数组的数组名(即指向数组首元素的指针)赋值给一个指针变量时,这个指针变量就指向了这个一维数组的首元素,因此可以通过数组名或指向它的指针访问该元素。同样的,当我们把二维数组的数组名作为指针变量的初值时,这个指针变量也指向了这个二维数组的首元素(即第一行第一列的元素),可以通过数组名或指向它的指针访问该元素,而数组名本身指向的也是二维数组的首元素。这个指向二维数组首元素的指针变量称为指向二维数组的指针。

那么,对于一个M行N列的二维数组,它的数组名即代表一个指向M个一维数组的指针,这M个一维数组中每个数组都有N个元素,因此可以把二维数组看作是一个MN个元素的线性数组,那么该线性数组又可以用指针表示,即指向MN个元素的指针,这个指向M*N个元素的指针又可以表示为一个指向指针的指针,即指向指向一维数组的指针的指针,也即指向指向二维数组首元素的指针的指针,这就是指向二维数组的指针的指针。

下面通过两个示例来说明二维数组指针的使用:

示例一

假设有一个3行4列的二维数组,其元素值为:

1 2 3 4
5 6 7 8
9 10 11 12

我们可以声明一个指向该二维数组的指针,以及使用指针访问元素:

int a[3][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};
int (*p)[4];  // 声明一个指向含有4个元素的一维数组的指针
p = a;  // 将a赋值给p,p现在指向二维数组a的首元素
printf("%d\n", a[1][2]);  // 输出7
printf("%d\n", (*p)[2]);  // 输出3
printf("%d\n", (*(p+1))[2]);  // 输出7

在该例中,我们声明了一个名为a的3行4列的二维数组,并将其初始化。接着声明一个指向含有4个元素的一维数组的指针p,并将其赋值为a,这样p就指向了a的首元素,即a[0],这里要注意,由于a的每一行都含有4个元素,因此p需要指向含有4个元素的一维数组。接着我们使用数组名和指针来访问第二行第三列的元素,都成功输出了7。

示例二

假设有一个5行3列的二维数组,其元素为10到24之间的随机整数,我们要求该二维数组每行(即每个一维数组)的元素之和,并将结果存储到一个一维数组中,最后输出该一维数组的元素。

#include <stdio.h>

#define ROW 5
#define COL 3

int main()
{
    int a[ROW][COL];
    int sum[ROW] = {0};
    int i, j;
    int (*p)[COL];

    // 生成二维随机整数数组a
    for (i = 0; i < ROW; i++)
    {
        for (j = 0; j < COL; j++)
        {
            a[i][j] = rand() % 15 + 10;
            printf("%d ", a[i][j]);
        }
        printf("\n");
    }

    // 计算每行元素之和
    p = a;
    for (i = 0; i < ROW; i++)
    {
        for (j = 0; j < COL; j++)
        {
            sum[i] += *(*(p+i)+j);
        }
    }

    // 输出每行元素之和
    for (i = 0; i < ROW; i++)
    {
        printf("The sum of row %d is %d\n", i+1, sum[i]);
    }

    return 0;
}

在该例中,我们首先生成一个5行3列的随机整数二维数组a,接着声明一个指向该二维数组的指针p,并将其初始化为a,接着使用嵌套的for循环计算每行元素之和,并将其存储在sum数组中,最后输出每行元素之和。由于p一开始指向的是a的首元素,因此使用*(*(p+i)+j)可以遍历该二维数组的所有元素,并计算每行元素之和。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言二维数组指针的概念及使用 - Python技术站

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

相关文章

  • Android Studio创建AIDL文件并实现进程间通讯实例

    以下是使用Android Studio创建AIDL文件并实现进程间通讯的完整攻略: Android Studio创建AIDL文件并实现进程间通讯实例 1. 创建AIDL文件 在Android Studio中,右键点击要创建AIDL文件的包名或文件夹,选择\”New\” -> \”AIDL\”。然后输入AIDL文件的名称,例如\”MyAidlFile\”…

    other 2023年10月14日
    00
  • win10手机正式版下载地址 win10手机正式版官方下载网址

    Win10手机正式版下载攻略 Win10手机正式版是微软推出的最新操作系统版本,提供了更多功能和优化。以下是详细的下载攻略,包含两个示例说明。 步骤一:访问官方网站 首先,你需要访问Win10手机正式版的官方网站。官方网站提供了最安全和可靠的下载渠道。 示例说明1:访问微软官方网站 你可以在浏览器中输入以下网址来访问微软官方网站: [https://www.…

    other 2023年8月4日
    00
  • 虚拟机安装openwrt-koolshare-router

    虚拟机安装OpenWrt-Koolshare-Router OpenWrt是一个嵌入式系统的开源操作系统,它可以被安装在各种路由器上,包括Koolshare路由器。在安装OpenWrt系统之前,我们可以先尝试在虚拟机上运行OpenWrt-Koolshare-Router,以便更好地了解它的功能和如何使用。 下载OpenWrt-Koolshare-Router…

    其他 2023年3月28日
    00
  • Java实现复原IP地址的方法

    Java实现复原IP地址的方法 复原IP地址是指将一个字符串转换为合法的IP地址。在Java中,可以使用递归和回溯的方法来实现这个功能。下面是一个完整的攻略,包含了详细的步骤和两个示例说明。 步骤 定义一个函数restoreIpAddresses,该函数接受一个字符串作为输入,并返回所有可能的合法IP地址。 在restoreIpAddresses函数中,创建…

    other 2023年7月31日
    00
  • win10系统如何在桌面右键菜单中添加关闭显示器选项?

    首先需要明确一点,Windows 10系统默认情况下并没有在桌面右键菜单中添加关闭显示器选项,但可以通过一些操作实现此功能。 以下是实现步骤: 第一步:打开注册表 按下快捷键“Win+R”,在运行窗口中输入“regedit”并按下“Enter”键,打开注册表。 第二步:创建一个新的键和项 在注册表编辑器中,展开“HKEY_CLASSES_ROOT\Direc…

    other 2023年6月27日
    00
  • 让ThinkPHP支持大小写url地址访问的方法

    让ThinkPHP支持大小写URL地址访问的方法攻略 ThinkPHP是一个流行的PHP开发框架,它默认情况下对URL地址的大小写不敏感。如果你需要让ThinkPHP支持大小写URL地址访问,可以按照以下步骤进行设置。 步骤一:修改配置文件 打开ThinkPHP的配置文件config.php,一般位于项目根目录下的application文件夹中。 找到URL…

    other 2023年8月16日
    00
  • WPS怎么快速生成文件夹? WPS表格和TXT文本生成多个文件夹的教程

    WPS怎么快速生成文件夹,可以通过WPS表格和TXT文本来实现。下面我们来详细讲解如何进行操作。 使用WPS表格批量生成文件夹 打开WPS表格,新建一个空表格。 在第一行第一列输入“名称”,在第一行第二列输入“路径”。 在第二行第一列输入一个文件夹的名称(例如:文件夹1),在第二行第二列输入该文件夹的路径(例如:D:/文件夹1)。 点击第二行第一列的单元格,…

    other 2023年6月26日
    00
  • 苹果 iOS 15/iPadOS 15 开发者预览 Beta 推送(附描述文件下载)

    苹果 iOS 15/iPadOS 15 开发者预览 Beta 推送攻略 背景介绍 苹果公司于2021年6月7日举行的WWDC上,发布了全新的操作系统iOS 15和iPadOS 15。该版本的更新增加了众多新功能,包括FaceTime升级、新的通知系统、云服务改进等等。 目前,iOS 15和iPadOS 15已经开放给部分开发者体验,开发者可以通过官方渠道下载…

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