关于C++二维数组和指针的疑问

2024-11-17 19:39:54
推荐回答(5个)
回答(1):

虽然a=&a[0],a[0]=&a[0][0],但是a和a[0]的类型是不一样的,一个是int[]型的指针,一个是int型的指针。所以&a[0][0]就相当于: int i; int j = &i;里的&j,一个整型值可以有地址,但是这个整型值的地址芦亮莫非还要有地址?试想如果编译器给你保存这个地址的地址,那么地址的地址的地址它保存不保存?如此递拦如归下去还有完没完?简哗启所以输出&&j是错的,因为假设i = 10; &j = 0x123456;那么如果再输出&&j也就是要输出&(0x123456),&操作符需要左值,也就是需要一个变量,这明显是不对的。

回答(2):

这一点很简单,a[0]与&a[0]的地址值是必须相等的,在内存中它们对应的物理地址是同一个,只是逻辑上有区别而已,物理地址相同不代表他亏神们的寻址方式相同,给你分析下(a+1)与(*a+1)的区别你就明白了,a+1指针跳跃3*4个字节(因为你定义的是两行三列的整型数组),(*a+1)指针跳跃的是悄空兄1*4个字节 应该懂了吧,对应的物理地址一样但是它们寻址时跨越的启袭空间不一样

回答(3):

其实和一维数组类似, 比如数组int b[3],b是指向第一个元素的指针。那么对于数组int a[2][3],a同样是指向第一个元素的指针,但是这第一个元素是什么??稿凳纳这里已经不再是一个int型的数了,而是指向第一粗困行,即指向包含3个元素数组的指针。所以a指向第一行,a+1指向第二行。

你所说的a==&a[0],这就是键没不成立的,应该是a==a[0]。

回答(4):

数组名AR只是一个地址,
*(*(氩+ I)+ j)条);
里面有*(AR + I),以获得扮誉相应的价搭缺羡值的Ar + i地址是不合法知拍的地址,从而使错误的二维数组,该值加j是实际上是一个共同的价值,而不是地址的数组。

回答(5):

a是指向指针的指针,也就是说a的值还是指针。意思在a的内存中储存是a[0]的地址。