C++中的二维数组和指针

本文探讨了C++中二维数组与指针的关系。当尝试将二维数组赋值给int * *类型的指针时会出现错误,因为数组类型不匹配。通过示例代码展示了数组的地址行为,指出虽然a、a[0]和&a[0][0]的数值相同,但它们的含义和大小由sizeof运算符揭示出差异。C++中的二维数组本质上是一维数组的数组,理解这一点对于正确操作和理解数组至关重要。

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

code1:

int a[2]={1,2};

int * p=a;


code2:

int a[2][5]={1,2,3,4,5,6};

int * *p=a;

以上两份代码中,第一份不会报错,但第二份会报错,因为p是int * *类型,而a是int (*) [5]类型。

第二份代码中,如果使用cout输出a,a[0]和&a[0][0],会发现三者的值一样,再输出*a,会发现值与以上三者完全一样。

但是如果使用sizeof,则会得出完全不同的结果,会发现sizeof(a)是整个数组的大小(我的电脑上是40),sizeof(a[0])是数组一行元素的大小(本例中是一行5个元素,我的电脑上是20),sizeof(&a[0][0])是4。

C++中,二维数组实际上是一个每个元素都是一维数组的一维数组。

所以,a[2][5]是含有两个一维数组的一维数组,这两个一维数组的元素个数均为5个。

a的意义是含有这两个一维数组的一维数组的地址,所以在数值上等于第一个一维数组的地址,即a[0]。

同理,a[0]在数值上等于&a[0][0]。

注意,只是数值相等,意义并不一样。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值