关于二维数组中的一个问题....高手进!

假如定义一个二维数组..
int a[3][2];

a+1等价于a[1],a[1][0]的地址,对吧!

a[1]等价于*(a+1),对吧!

那这样的话.不就相当于 a+1等价于*(a+1) ?

这个怎么解释啊!高手请指教!
不好意思.我说清楚一点.我说的是a+1等价于a[1],不是等价于a[1]的地址....那位朋友.你说a+1等价于&a[1],不等价于a[1], 这个应该不对吧...a+1是第二行的首地址..而a是二维数组.所以第二行的首地址也可以表示为a[1],不是吗?
谁说a[1]不等价于*(a+1)?书上有这样一句话,"在C语言中,有一个等式永远成立,即a[i]无条件等价于*(a+i)”!你说*(a+i)得到的是一个值,那是一维数组。我是说二维数组。。。。

a+1等价于*(a+1) ?
就数值而言,二者是相等的,但是二者的类型不一致,这点也是必须承认的.a+1是&a[1],是a[1]的地址,而*(a+1)是a[1],是a[1][0]的地址,因为二者都在数组a[][]的首位置,数值必然是相等的,但是很明显,a[1]和a[1][0]类型是不一样的.

换个角度:
int i = 0;
int *p = 0;
那么,能说p等价于i么?不能,虽然数值相同,但是二者的含义却是完全两样的.
温馨提示:内容为网友见解,仅供参考
第1个回答  2008-03-16
a+1等价于&a[1],不等价于a[1],
但是,在数值上&a[1]和a[1]和&a[1][0]是一样的
a等价于a
a[1]等价于*(a+1)
&a[1]等价于a+1
a[1][0]等价于*(*(a+1)+0)等价于**(a+1)
第2个回答  2008-03-16
你自己都说a+1等价于a[1]的地址。 a+1 = &a[1];
a[1] = *(a+1)
哪么按照你的理论就应该是 a+1 = & * ( a+ );说白了就是a+1=a+1;
你的等号等着等着就变了味啊。呵呵呵。。。。
第3个回答  2008-03-16
a[1]等价于*(a+1),对吧!

不对.

a[1]是得到一个地址,*(a+1)是得到一个值.
第4个回答  2008-03-16
a+1等价于a[1],a[1][0]的地址,对吧!

a[1]等价于*(a+1)

是对的,

a+1等价于a[1]的***地址***, 即a+1==&a[1]

大哥,是地址!!!

二维数组比较麻烦,你先看哈指针,我看了哈你的补充,给你写点具体的...

二维数组a[3][3]
则有a为不可改变的行指针(二重指针),其值是一个地址,*a则为不可改变的列指针(一重指针),其值也是一个地址(与a的值相同),**a是一个数值,即a[0][0],

a==&(*a)==*a==a[0]==&a[0]==&a[0][0](此处的==是指值相等)
可以用以下程序试验:
void main(void)
{
int a[3][3];

printf("a:%o &(*a):%o *a:%o a[0]:%o &a[0]:%o &a[0][0]:%o", a, &(*a), *a, a[0], &a[0], &a[0][0]);

getch();
}

记住:加一个*或者是[]就使指针重数减一,但是要考虑到是同一地址的情况,所以才有了
a==a[0]==&a[0]这种很不可思议的情况...
第5个回答  2008-03-16
C 语言二维数组:
int a[j][i]; i=0...NX-1, j=0...NY-1
排列: j=0, i=0 ... NX-1
j=1, i=0 ....NX-1
....
J=NY-1,i=0....NX-1

二维数组,写成 a[1] 形式 应当是 地址 计算式.
a+1 也是 地址 计算式.

a[1] 是 a[1][0] 正确
a+1 不是 a[1][0], 而是 a[0][1]

关于二维数组中的一个问题...高手进!
就数值而言,二者是相等的,但是二者的类型不一致,这点也是必须承认的.a+1是&a[1],是a[1]的地址,而*(a+1)是a[1],是a[1][0]的地址,因为二者都在数组a[][]的首位置,数值必然是相等的,但是很明显,a[1]和a[1][0]类型是不一样的.换个角度:int i = 0;int *p = 0;那么,能说p等...

VB二维数组问题~ 求高手。(追分!!!)
看样子,你用的是vb6,你可以把输出用的语句 Print h(j, k) 后面加一个逗号。Print h(j, k),这样就可以打印出矩形解构了。也可以用如下写法,可能好一点儿 Print h(j, k) + space(1);

C语言二维数组问题
1、name[NUM][10]表示NUM(10)行10列的数组,NUM表示10个人,后面的10表示姓名字符串的长度(最长为9,后面系统自动加上'\\0')2、不能用一维数组定义姓名,因为是字符类型的数组,姓名中包含多个字符。一维数组只能保存一个姓名。3、stmp是一维数组,保存一个字符串的。不是用来保存10个人的姓名,...

java关于二维数组的问题。
第一轮大循环:i 取值为0时,j取值0,1,2,则打印:arr[0][0],arr[1][0],arr[2][0]即: 1,4,7 由此推导:i取值1,2时打印内容为:2,5,8 3,6,9 最后应该打印出两个矩阵:123 456 789 147 258 369 Right?

一个关于C语言中二维数组的问题(如何判断数组中的数全为1?)
最直接的办法就是调用函数,将该数组作为实参传递,然后在函数中定义一个变量flag作为标记,用循环遍历这个二维数组 如果数组元素为1则将flag置为1继续扫描,否则置为0并退出循环 返回flag,flag为1则表示数组元素全为1,否则不全为1

C语言的二维数组问题
所以定位一个m行n列的二维数组中的某个元素的位置,可以使用线性下标来访问 比如a[i][j]在一个n列的二维数组里的位置就是i*n+j 拿刚才那个例子来看 a[0][0]就是0*2+0 = 0,相当于一维数组的第1个元素 a[1][0]就是1*2+0 = 2,相当于一维数组的第3个元素 所以第i行j列的元素...

指针指向二维数组的问题
但是没有a+3,就没有给p+3赋值,那么p[3]应该是指向数组后面的一块内存,但并不属于数组!我想暂时只能这么理解下吧!但还是有很多矛盾,之一是a 和a[0]内容和地址都相同,为什么p=a改成p=a[0],就报错呢!我也只是初学者,带着同样的困惑发表点意见,让高手们见到,不免贻笑大方!朋友,一...

关于二维数组的c语言题目
二维数组是可以这样的{ {1 2 3} {4 5 6} {7 8 9} } 即a[0][0] = 1 a[1][1] = 5 a[2][2] = 9 由b+=a[i][i]可知相加而得 15

二维数组 长度定义 高手进!!!
if(line>MAX||column>MAX) {cout<<"输入的数据太大!\\n";exit(1);} \/\/处于安全考虑不省略为好!cout<<"请输入"<<line<<"行"<<column<<"列数据:"<<endl;sum=line*column;\/\/数组元素个数总和 for(int i=0;i<line;i++)for(int j=0;j<column;j++)cin>>a[i][j];for(i=0;...

c语言二维数组应用冒泡排序问题```高手来
老兄我终于帮你做好了,害得我课都没有去上,所以要给我加分哦!!!下面的程序非常的智能化了,并且已经成功通过。include<stdio.h> void main(){ int a[2][4],b[2][4];int i,j,t;printf("input 10 numbers:\\n");for(i=0;i<2;i++)for(j=0;j<4;j++)scanf("%d",&a[i]...

相似回答
大家正在搜