关于二维数组的
#include <iostream.h>
void main()
{
int a[3][4]={1,10,3,4,5,6,7,8,9,10,11,12};
cout<<*(a+1)<<endl;
cout<<a+1;
}
为什么这两个显示结果一样?
问题点数:20、回复次数:11Top
1 楼yuanque(无心快语)回复于 2002-11-20 18:04:58 得分 0
*(a+1)==a[1]=a+1也就是第a[1][0]的地址啊Top
2 楼gq00001(gq00001)回复于 2002-11-20 18:11:44 得分 0
是啊,数组就是一个特别的指针Top
3 楼lwbhero(孤陋寡闻)回复于 2002-11-20 18:14:43 得分 0
a+1是a[0][1]的地址;而*(a+1)是a[0][1]的值,它们怎么能一样呢?又不是字符数组.你是用什么编译器运行的?
Top
4 楼cenphoenix(火凤凰)回复于 2002-11-20 18:19:44 得分 0
就是 就是Top
5 楼AlanLuo_2002(耶罗)回复于 2002-11-20 18:27:08 得分 0
我用的是VC,他们都显示的是地址,当我用**(a+1)的时候显示的就是值了,我像问的为什么加*和不加都是显示地址?Top
6 楼Solosoul(树雨)回复于 2002-11-20 18:43:34 得分 0
*(a+1)应该是a[1],而a[1]本身也是地址。
对于二维数组,a,a[i]都是地址。
大概是这样,详细的查书吧。Top
7 楼AlanLuo_2002(耶罗)回复于 2002-11-20 18:51:13 得分 0
是不是应该这样理解:
a+1代表第一行的地址,*(a+1)代表第一行第0列的地址?所以这两个一样,
而*(a+1)+1代表第1行,第一列的地址Top
8 楼bonmarshal(蚂蚁)回复于 2002-11-20 19:07:10 得分 0
如果取a[1][2]应为*(*(a+1)+2) 即*(a+1)为指针 而 a+1也为指针 所以均为地址值Top
9 楼lilu207(lilu)回复于 2002-11-20 19:14:35 得分 20
二维数组中,a指向整个数组的头地址,即a[0][0],是二维数组指针,a[0]指向二维数组中第一行的头地址,即a[1]指向a[1][0],是一维数组指针。所以,在一维数组里a+1是地址,指向a[1], *(a+1)也是地址(a+1)的值。但在二维数组里,a+1是地址,指向a[1][0],它还是二维数组指针,即在行上加1,*(a+1)也是地址,同样指向a[1][0],但它是一维数组指针,**(a+1)才是一维数组地址所指向的值a[1][0]。
我这样解释,不知道说清楚了没有,总之,二维数组的每一行就相当于一个一维数组,我们可以将二维数组理解为是一维数组的嵌套。Top
10 楼kangqi_520(康琦)回复于 2002-11-20 19:18:17 得分 0
是啦Top
11 楼AlanLuo_2002(耶罗)回复于 2002-11-20 20:20:57 得分 0
明白了!Top




