C++数组和指针,多维数组

本文探讨了C++中的数组与指针的关系,特别是聚焦于多维数组,尤其是二维数组。通过实例展示了数组名作为指针常量的概念,并解释了二维数组在内存中的一维存储方式。此外,还讨论了二维数组作为函数参数的传递方式及其相关的函数原型定义,帮助读者深入理解指针数组和数组指针的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数组不是指针,数组名的值是一个指针常量。

依据《c和指针》《c专家编程》上的例子,来总结一下。

int array[10];
int *ap =array + 2;

然后会有以下例子:

在c/c++中,array[2],2[array]是一样的,源自于同样的 *(array +2)的指针形式写法

 

多维数组(从二维数组说起)

*(*(p+i)+j)//是p[i][j]

二维数组函数传参比较麻烦,下图参考《c专家编程》

int data[3][4] = {{1,2,3,4}, {9,8,7,6}, {2,4,6,8}};

以上的数组也可以写成一维的形式:

int data[3][4] = {1,2,3,4,9,8,7,6,2,4,6,8};

或:

int data[][4] = {1,2,3,4, 9,8,7,6, 2,4,6,8};
二维数组在内存中的存储其实质是一维的。二维数组为一个数组的数组(见上一个图),也就是元素是数组的数组。二维数组完全可以理解为一个行列式,如上面的二维数组就是一个三行四列的数组。三行就是三个一维数组(或三个指针,每个指针表示一个一维数组)data[0]、data[1]、data[2].

/////////这是作为个人去理解////////////////

data[3][4]作函数参数时可以用下面的形式进行调用:

int sum(data,3);

为什么第二个参数是3而不是4呢?data数组的元素是3个(相当于是一个一维的3个元素的数组,其元素的类型又是一个一维数组)。data这种类型可以理解为:pointer-to-array-of four-int。

二维数组作函数参数时可以用下面的原型定义:

int sum(int (*ar2)[4], int size);

表示处理一个size行4列的函数。

int (*ar2)[4]是一个数组指针。ar2是一个指针,指向一个整型的一维数组,这个一维数组的长度是4。

理解指针数组与数组指针,先要理解一个运算符优先级的问题,“[]”的优先级比“*”要高。int *ar2[4],p1 先与“[]”结合,所以先是一个数组,因为又有*的声明,所以是一个指针数组。int (*ar2)[4],()优先级高,所以表明这个声明是一个指针,然后有数组[]的修饰,表明是一个数组指针。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值