千家信息网

如何使用C++数组指针和二维数组

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章主要介绍"如何使用C++数组指针和二维数组",在日常操作中,相信很多人在如何使用C++数组指针和二维数组问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"如何使用C
千家信息网最后更新 2026年11月02日如何使用C++数组指针和二维数组

这篇文章主要介绍"如何使用C++数组指针和二维数组",在日常操作中,相信很多人在如何使用C++数组指针和二维数组问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"如何使用C++数组指针和二维数组"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

1、二维数组

对于一维数组,int arr[10]; arr是数组名,也是首元素的地址,&arr是数组的地址,那么对于二维数组 int arr[3][3], arr可以肯定是数组名,那么他是不是首元素的地址呢?如果是首元素的地址,那么arr[0]又该是什么呢?通过以下代码进行验证:

#include #define ROW 3#define COLUMN 3int main(){    int arr[ROW][COLUMN] = {0};    printf("arr = %p\n", arr);    printf("arr[0] = %p\n", arr[0]);    printf("&arr[0][0] = %p\n", &arr[0][0]);    printf("\n\n");        printf("arr + 1 = %p\n", arr + 1);    printf("arr[0] + 1 = %p\n", arr[0] + 1);    printf("&arr[0][0] + 1 = %p\n", &arr[0][0] + 1);    printf("&arr[0][1]  = %p\n", &arr[0][1]);    return 0;}

代码运行的结果为:

可以发现,虽然arr = arr[0] = &arr[0][0],但是,arr[0] + 1 = &arr[0][0] + 1 = &arr[0][1] != arr + 1, 可以说明arr并不是arr[0][0]的地址,而是arr[0]的地址。那么二维数组中,arr还是首元素的地址吗?答案是:是的,arr是首元素的地址,只是二维数组中的首元素不是arr[0][0] ,而是arr[0]。而arr[0]又是一个一维数组,所以arr是首元素的地址是数组的地址,因此可以通过数组指针来保存arr。

那么对于,int arr[3][5]这样一个二维数组,应该怎样定义一个数组指针来保存arr呢?也就是-- = arr; --下划线处应该填写什么呢?

答案是:int (*parr)[5] = arr; 因为arr是一个二维数组,他的首元素是一个保存有5个int元素的数组,arr是数组首元素的地址,所以arr是一个数组的地址,数组保存的数据类型为int型,元素有5个。

那么 int (*parr[2])[3]应该表示什么呢? 首先在()内[ ]优先级高,所以parr是一个数组,有2个元素,()里面还有还有*,所以数组的元素为数组指针,数组指针指向的数组有3个元素,每个元素是int类型。

代码验证如下:

 #include int main(){    int arr1[3] = {1,2,3};    int arr2[3] = {2,3,4};    int (*parr[2])[3] = {&arr1, &arr2};    printf("&arr1 = %p\n&arr2 = %p\n",&arr1,&arr2);    for (int i = 0; i < 2; i++) {        printf("parr[%d] = %p\n",i,parr[i]);    }    return 0;}

运行结果为:

2、数组指针和二维数组

再次强调一下,int arr[2][3],这个二维数组的首元素是arr[0] ,arr[0]是一个一维数组,arr是首元素的地址,就是一个数组指针,所以,int (*parr) [3] = arr; 这也是为什么二维数组定义的时候可以不给出行元素的个数,但是一定要给出列元素的个数。

#include int main(){    int arr[][3] = {{1,2,3},{1,2,3}}; //正确定义    int arr[2][] = {{1,2,3},{1,2,3}}; //错误定义    return 0;}

指针数组和二维数组在应用中常用于函数传参,如我们不用数组指针来实现一个二维数组的值修改函数,

代码如下:

#include #define ROW 2#define COLUMN 3void arrReset(int arr[ROW][COLUMN], int row, int col) {for (int i = 0; i < row; i++) {        for (int j = 0; j < col; j++) {            arr[i][j] = 0;        }    }}int main(){    int arr[ROW][COLUMN] = {{1,2,3},{1,2,3}};     arrReset(arr, ROW, COLUMN);    for (int i = 0; i < ROW; i++) {        for (int j = 0; j < COLUMN; j++) {            printf("%d ", arr[i][j]);        }        printf("\n");    }        return 0;}

以上代码函数传参是通过数组的形式实现,代码运行结果为:

二维数组函数传参也通常通过指针去传递,以方便读写操作,下面给出指针形式传参的方式:

 1 #include  2 #define ROW 2 3 #define COLUMN 3 4 void arrReset(int(*parr)[COLUMN], int row, int col) {  5     for (int i = 0; i < row; i++) { 6         for (int j = 0; j < col; j++) { 7             //以下8-11行代码是等价的 8             //parr[i][j] = 0; 9             //(*(parr + i))[j] = 0;10             // *(*(parr + i) + j) = 0;11             *(parr[i] + j) = 0;12         }13     }14 }15 int main()16 {17     int arr[ROW][COLUMN] = {{1,2,3},{1,2,3}}; 18     arrReset(arr, ROW, COLUMN);19     for (int i = 0; i < ROW; i++) {20         for (int j = 0; j < COLUMN; j++) {21             printf("%d ", arr[i][j]);22         }23         printf("\n");24     }25     26     return 0;27 }

可以发现代码8-11行为等价代码,这与上一篇数组指针和指针数组 - 学渣的C/C++ - 博客园 (cnblogs.com)博客中的指针数组访问数组元素的例子相同,其实,确实可以这样理解,访问二维数组的时候就是访问一个存放一维数组的一维数组。但是要注意,是访问二维数组的元素时候,可以这样理解,定义的时候不能这样理解,因为一个是二维数组,一个是一维数组,

如以下错误代码:

 1 #include  2 int main() 3 { 4     int arr1[3] = {1,2,3}; 5     int arr2[3] = {4,5,6}; 6     int* arr3[2] = {arr1, arr2}; 7     int arr4[2][3] = arr3; //错误代码 8      9     return 0;10 }

到此,关于"如何使用C++数组指针和二维数组"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

数组 元素 二维 指针 地址 代码 一维 C++ 函数 时候 j++ 学习 结果 错误 运行 个数 博客 就是 形式 更多 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网黑科技 上海挚品互联网科技有限公司 中资互联网科技 互联网科技集团 互联网与新科技 中国互联网科技发展 撒么互联网科技公司 中化能源互联网科技招聘 互联网科技项目计划书材料类 成都铂石互联网科技做什么的 中国航天科技大学国际工业互联网 江阴互联网智能科技产品进口 黑云互联网科技有限公司 互联网领先科技宣传片 半导体是互联网高科技吗 上海互联网科技公司ppt 九思连强互联网电子科技有限公司 全球科技与互联网公司市值变化 互联网科技快速发展优美句子 科技发展第三阶段互联网时代 朗新科技与工业互联网 华中科技大学互联网 亿人帮互联网科技 济南华为互联网科技产业总部基地 呼和浩特新华互联网科技学院 乌苏新华互联网科技做什么的 燊美集互联网科技有限公司 深圳无忧互联网科技 科技互联网专业工作会议发言稿 科技发展第三阶段互联网时代
0