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

yizhihongxing

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日

相关文章

  • DOS命令详解

    DOS命令详解攻略 DOS命令(Disk Operating System)是计算机系统中最广泛使用的命令行工具。在Windows操作系统早期版本中,DOS命令是唯一的工具,现在它依然可以被许多程序和脚本所调用。本篇攻略将会完整讲解DOS命令的用法和示例。 常用DOS命令 dir 命令 语法: dir [参数] [目录路径] 功能: 显示当前目录及其子目录下…

    other 2023年6月26日
    00
  • iOS7 Beta4下载地址收集汇总来自百度网盘

    iOS7 Beta4下载地址收集汇总来自百度网盘攻略 简介 在本攻略中,我们将详细讲解如何获取iOS7 Beta4的下载地址,并汇总这些地址来自百度网盘。iOS7 Beta4是苹果公司发布的iOS7操作系统的测试版本,它包含了一些新功能和改进,因此对于开发者和技术爱好者来说是非常有吸引力的。 步骤 步骤1:访问百度网盘 首先,打开你的浏览器,并访问百度网盘的…

    other 2023年8月4日
    00
  • Linux基础(11)原始套接字

    Linux基础(11) 原始套接字 在计算机网络中,套接字(socket)是通信的基础,原始套接字(raw socket)就是在传输层协议中更底层的一种套接字。原始套接字可以用于发送和接收IP数据包,使用原始套接字可以让我们更加深入地了解网络通信过程中的细节。 创建原始套接字 在Linux系统中,我们可以使用socket()函数来创建原始套接字。需要指定地址…

    其他 2023年3月28日
    00
  • 关于数据库设计中主键问题的思考

    当进行数据库设计时,主键是一个重要的问题,它需要仔细考虑和规划。以下是数据库设计中主键问题的思考攻略,希望能够对你有所帮助。 1. 了解主键的定义 在数据库中,主键是一种特殊的约束条件,用于标识和唯一地定义表中的每个记录。主键可以由单一列或多个列组成,不过它们必须满足以下要求: 主键不允许为空值 主键必须是唯一的 每个表只能有一个主键 2. 选择主键 在选择…

    other 2023年6月25日
    00
  • Android 解决ScrollView嵌套CridView显示问题

    Android 解决ScrollView嵌套CridView显示问题攻略 在Android开发中,当我们需要在一个滚动视图中嵌套另一个滚动视图时,常常会遇到ScrollView嵌套CridView显示问题。这个问题的主要原因是ScrollView会占用CridView的滚动事件,导致CridView无法正常滚动。下面是解决这个问题的完整攻略。 步骤一:使用N…

    other 2023年7月28日
    00
  • Win11 Beta预览版Build 22621.160更新补丁KB5014770推送(附更新修复内容)

    Win11 Beta预览版Build 22621.160更新补丁KB5014770攻略 本攻略将详细介绍Win11 Beta预览版Build 22621.160的更新补丁KB5014770,并提供两个示例说明。以下是攻略的完整内容: 更新修复内容 该更新补丁KB5014770旨在修复Win11 Beta预览版Build 22621.160中的一些已知问题和漏…

    other 2023年8月3日
    00
  • dicom医学图像处理:fo-dicom网络传输之c-echoandc-store

    以下是“DICOM医学图像处理:fo-dicom网络传输之C-ECHO和C-STORE”的完整攻略: DICOM医学图像处理:fo-dicom网络传输之C-ECHO和C-STORE DICOM(数字成像和通信医学)是医学图像中广泛使用的标准。在DICOM中,C-ECHO和C-STORE是两个常用的网络传输协议,用于检查DICOM设备之间的连接和传输图像。本攻…

    other 2023年5月7日
    00
  • Android EditText实现分割输入内容

    当你想要在Android应用中实现分割输入内容的功能时,可以使用EditText控件来实现。下面是一个完整的攻略,包含了两个示例说明。 示例1:使用TextWatcher实现分割输入内容 首先,在你的布局文件中添加一个EditText控件: <EditText android:id=\"@+id/editText\" android…

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