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日

相关文章

  • postman自定义函数实现 时间函数的思路详解

    Postman自定义函数实现时间函数的思路详解 Postman是一款常用的API开发和测试工具,它提供了自定义函数的功能,可以通过编写JavaScript代码来扩展其功能。下面是实现时间函数的思路详解。 步骤一:创建自定义函数 首先,在Postman中创建一个自定义函数,用于实现时间相关的功能。可以通过以下步骤创建: 打开Postman应用程序。 在左侧导航…

    other 2023年7月29日
    00
  • 爬虫简介、requests基础用法、urlretrieve()

    爬虫简介、requests基础用法、urlretrieve() 爬虫简介 爬虫(英文名:web crawler 或 spider),是一种自动获取网页内容的程序。网页内容包括:文本、图片、音频、视频等。爬虫工作的模式一般是模拟浏览器行为,向目标网站发送 HTTP 请求,获取响应数据,然后解析数据提取需要的信息。爬虫常用于搜索引擎抓取网页、数据分析、数据挖掘等…

    其他 2023年3月28日
    00
  • IOS开发中NSURL的基本操作及用法详解

    iOS开发中NSURL的基本操作及用法详解 NSURL是iOS开发中用于处理URL的类,它提供了一些方法和属性,用于创建、解析和操作URL。在本攻略中,我们将详细介绍NSURL的基本操作及用法。 创建NSURL对象 要创建NSURL对象,可以使用以下两种方法: 使用字符串创建NSURL对象: let urlString = \"https://ww…

    other 2023年8月5日
    00
  • SpringBoot使用Druid数据源的配置方法

    下面我将为大家详细讲解使用Spring Boot配置Druid数据源的方法。 1. 引入Druid和JDBC驱动 首先,我们需要在maven中引入druid和JDBC驱动的相关依赖,可以根据实际需求进行版本选择。在pom.xml文件中添加以下依赖: <dependency> <groupId>com.alibaba</group…

    other 2023年6月27日
    00
  • C++实现LeetCode(6.字型转换字符串)

    让我来为你详细讲解“C++实现LeetCode(6.字型转换字符串)”的完整攻略。 1. 题目描述 这道题目的具体描述如下:给你一个字符串 s 和一个整数 numRows,表示字型转换中行数。 请你设计一个算法,将字符串 s 进行字型转换,使其按照 zigzag 的顺序输出并返回新的字符串。例如,输入字符串为 “PAYPALISHIRING”,行数为 3 时…

    other 2023年6月20日
    00
  • 十条服务器端优化Web性能的技巧总结

    下面我将为您详细讲解“十条服务器端优化Web性能的技巧总结”的完整攻略。 十条服务器端优化Web性能的技巧总结 1. 启用Gzipping压缩 启用Gzipping压缩可以减小传输的数据量,从而提升网站的加载速度。在Apache服务器中,可以通过修改.htaccess文件启用Gzipping压缩,示例代码如下: <IfModule mod_deflat…

    other 2023年6月27日
    00
  • vue中如何获取session对象中的属性值

    以下是Vue中如何获取session对象中的属性值的完整攻略,包括两个示例说明。 1. 获取session对象中的属性值 在Vue中,可以使用sessionStorage对象来存储会话数据。要获取sessionStorage对象中的属性值,可以使用以下代码: const value = sessionStorage.getItem(‘key’); 该代码将获…

    other 2023年5月9日
    00
  • 苹果 macOS 13.2 开发者预览版 Beta 2 发布

    下面是详细的攻略: 苹果 macOS 13.2 开发者预览版 Beta 2 发布 背景介绍 苹果公司于近日宣布,macOS 13.2 开发者预览版 Beta 2 版本已经发布,该版本主要是修复了一些程序错误和安全漏洞等问题。同时,这个版本也增加了新的功能和改进,并对操作系统进行了优化,以提升用户体验。 更新方式 如需更新到 macOS 13.2 beta 2…

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