C++指针数组、数组指针、数组名及二维数组技巧汇总

C++指针数组、数组指针、数组名及二维数组技巧汇总

在C++中,指针数组、数组指针、数组名及二维数组是比较容易混淆的概念,下面我们一一介绍。

数组名

数组名是一个常量指针,指向数组的第一个元素的地址。例如,下面的代码定义了一个整型数组arr,arr即指向数组第一个元素的地址。

int arr[10];
int *p = arr;  // arr等价于&p[0]

指针数组

指针数组是由一组指针构成的数组,也就是说,数组中每个元素都是一个指针。例如,下面代码定义了一个存放5个指向int类型变量的指针的指针数组ptrArr。

int *ptrArr[5];  // 指针数组

数组指针

数组指针是一个指向数组的指针。例如,下面代码定义了一个指向整型数组的指针arrayPtr。

int arr[10];
int (*arrayPtr)[10] = &arr;  // 数组指针

二维数组

二维数组是一个数组,其中的每个元素又是一个数组,也就是在一个数组中放置了若干数组。例如,下面代码定义了一个3行4列的二维整型数组val。

int val[3][4];  // 二维数组

数组指针和指针数组的区别

数组指针指向一个数组,指针数组是一个数组,数组中的元素都是指针。二者的语法形式不同,使用方法也不同。例如,下面代码展示了如何对一个存储字符指针的指针数组进行初始化:

char *str[3] = {
  "Hello",
  "World",
  "C++"
};

而下面代码展示了如何使用数组指针对一维数组进行初始化:

int arr[5] = {1, 2, 3, 4, 5};
int (*ptr)[5] = &arr;

二维数组的技巧

使用指针访问二维数组

使用指针访问二维数组可以大幅提高访问效率,因为指针访问数组可以使用指针运算,避免了重复的下标计算。

int val[3][4];
int (*p)[4] = val;  // 定义指向二维数组的指针
// 使用指针遍历访问二维数组
for (int i = 0; i < 3; i++) {
  for (int j = 0; j < 4; j++) {
    *(*p + 4 * i + j) = i * j;
  }
}

定义二维数组参数

当定义一个参数是二维数组的函数时,可以使用行数明确指定二维数组的列数,也可以省略行数,让编译器自动推导列数。例如,下面展示了两种不同的定义方式:

// 声明时指定列数
void print_array(int arr[][5], int rows) {
  for (int i = 0; i < rows; ++i) {
    for (int j = 0; j < 5; ++j) {
      cout << arr[i][j] << " ";
    }
    cout << endl;
  }
}

// 编译器自动推导列数
void print_array_auto(int (*arr)[5], int rows) {
  for (int i = 0; i < rows; ++i) {
    for (int j = 0; j < 5; ++j) {
      cout << arr[i][j] << " ";
    }
    cout << endl;
  }
}

以上就是C++指针数组、数组指针、数组名及二维数组的完整攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++指针数组、数组指针、数组名及二维数组技巧汇总 - Python技术站

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

相关文章

  • 操作系统的作用是什么

    操作系统是一种控制计算机硬件和软件资源的系统软件。其主要作用是提供计算机系统的基础功能,包括管理和协调软硬件资源、控制程序运行和提供用户与系统的接口等。 操作系统的主要作用包括以下几个方面: 管理计算机的硬件资源:操作系统可以对硬件资源进行管理,包括内存、磁盘、输入输出设备等,协调各个资源之间的竞争关系,以保证计算机系统的高效稳定运行。例如,在一个多用户操作…

    其他 2023年4月16日
    00
  • mysql为字段添加和删除唯一性索引(unique) 的方法

    为字段添加唯一性索引可以保证该字段值的唯一性,避免出现重复的数据。下面介绍 MySQL 对字段添加和删除唯一性索引的方法。 添加唯一性索引 添加唯一性索引的语法 添加唯一性索引的语法如下: ALTER TABLE table_name ADD CONSTRAINT constraint_name UNIQUE (column_name); 其中,table_…

    other 2023年6月25日
    00
  • Win10周年更新教育版中文官方ISO镜像下载地址(32位/64位)

    Win10周年更新教育版中文官方ISO镜像下载攻略 Win10周年更新教育版是一款面向教育领域的操作系统版本,提供了一系列专为学生和教育工作者设计的功能和工具。以下是获取Win10周年更新教育版中文官方ISO镜像的详细攻略。 步骤一:访问官方网站 首先,打开你的网络浏览器,访问微软官方网站。你可以在浏览器的地址栏中输入以下网址: https://www.mi…

    other 2023年7月28日
    00
  • linuxctrl+z的使用方法

    Linux下Ctrl + Z的使用方法 简介 在Linux中,Ctrl + Z组合键可以将当前正在运行的进程暂停,并将该进程放到后台去执行。 语法 在命令行下输入以下组合键: Ctrl + Z 示例 以下是两个示例: 示例1:暂停一个正在运行的进程 例如,我们启动了一个实例并希望暂停它,我们可以在终端中使用Ctrl + Z组合键: $ node app.js…

    其他 2023年4月16日
    00
  • C++ vector数组用法及解析

    C++ vector数组用法及解析 什么是vector? vector是C++标准程序库STL中的一个类模板,提供了封装动态数组的功能。支持在数组元素的末尾进行快速的插入和删除,还能够实现快速的随机访问。 vector是一个类模板,因此我们需要使用类模板来定义vector。定义vector对象时,需要指定所存储的元素类型。 vector常见操作 下面将具体介…

    other 2023年6月25日
    00
  • 为EasyUI的Tab标签添加右键菜单的方法

    为EasyUI的Tab标签添加右键菜单方法如下: 1. 引入jQuery插件 为了实现EasyUI的Tab标签添加右键菜单,需要使用到jquery.contextmenu插件,所以首先需要引入jquery.contextmenu插件到项目中。 <head> <script type="text/javascript" s…

    other 2023年6月27日
    00
  • 利用IDEA工具修改Maven多模块项目标识包名全过程记录

    利用IDEA工具修改Maven多模块项目标识包名全过程记录攻略 本攻略将详细介绍如何使用IDEA工具修改Maven多模块项目的标识包名。以下是完整的步骤记录: 步骤一:打开项目 首先,使用IDEA工具打开你的Maven多模块项目。 步骤二:定位要修改的包名 在项目结构中,定位到你想要修改的包名所在的模块。可以通过展开项目结构树,在src/main/java目…

    other 2023年9月7日
    00
  • js 屏蔽鼠标右键脚本附破解方法

    为了防止恶意用户进行复制、粘贴、截图等非法操作,网页开发者可以在其网页中使用js屏蔽鼠标右键。下面,将为大家提供js屏蔽鼠标右键的完整攻略。 1. 代码实现 js屏蔽鼠标右键是通过监听鼠标事件来实现的,当监听到右键点击事件时,对该事件进行屏蔽。下面是代码实现的示例: document.oncontextmenu = function() {return fa…

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