2. p = a;
3. p+i == &b[i],
4. b[i] ==*(p + i),
5. b[i] + j == &b[i][j],
6. b[i][j] == *(*(p + i) + j)
1. 定义一个二维数组 和 一个数组指针
2. 正数组指针指向这个二维数组
3. 第i行的首地址
4. 第i行一维数组的值
5. ?
6. ?
帮忙看一下 我前4行理解的对不对? 还有第5,6行是什么意思?看不懂 帮忙解释一下
----------------解决方案--------------------------------------------------------
1 错```
INT (*p)[4];``定义一个指向一个含4个整型元素的一维数组的的指针变量``等价于int p[4];
你下面的b是什么```???
2.让我感觉很难受```但是肯定不可以```一个指想2维```是一个2级指针``一个指想一维``是一级指针```
而且我不知道数组间的名字是不是可以相互赋值```
[此贴子已经被作者于2007-10-13 15:34:21编辑过]
----------------解决方案--------------------------------------------------------
定义一维数组指针应该是int *p[4] 二维数组指针是int *p[4][4]
最好把你自己的程序执行一下再输出看看是上面!
加深对指针理解可以参考下面程序!
#include <stdio.h>
char *pp[2][3]={ { "abc", "defgh", "ijkl"} , { "mnopqr", "stuvw", "xyz"} }; //2维数组等价于此
main ( )
{ printf("%c\n",***(pp+1));
//*(pp+1)即pp[1]指向{ "mnopqr" , "stuvw", "xyz"}元素
//**(pp+1)即pp[1][0]指向"mnopqr"
//***(pp+1)即pp[1][0][0]即'm'
printf("%c\n",**pp[0] );
//pp[0]指向{ "abc", "defgh", "ijkl"}
//*pp[0]即pp[0][0]指向"abc"
//**pp[0]即pp[0][0][0]即'a'
printf("%c\n", (*(*(pp+1)+1))[4] );
//*(pp+1)即pp[1]指向{ "mnopqr" , "stuvw", "xyz"}
//*(*(pp+1)+1)即pp[1][1]指向"stuvw"
//(*(*(pp+1)+1))[4]即pp[1][1][4]即'w'
printf("%c\n", *(pp[1][2]+2) );
//pp[1][2]指向"xyz"
//*(pp[1][2]+2)即pp[1][2][2]即'z'
printf("%s\n", **(pp+1) );
//*(pp+1)即pp[1]指向{ "mnopqr" , "stuvw", "xyz"}
//**(pp+1)即pp[1][0]指向"mnopqr"
//输出类型string,输出"mnopqr"
}
----------------解决方案--------------------------------------------------------
1. int a[3][4], (*p)[4];
2. p = a;
3. p+i == &b[i],
4. b[i] ==*(p + i),
5. b[i] + j == &b[i][j],
6. b[i][j] == *(*(p + i) + j)
这个我应该搞懂了
它不是一个完整的程序
int (*p)[4]是一个行指针
b只是一个临时的东西 把a[3][4]这个二维数组分成几个一维数组 每个一维数组名是b[0],b[1],b[2],都包含4个整型
p = a; //让p指向数组a的首地址
p+i == &b[i], //第i行的首地址,也就是第i个一维数组的首地址(每个元素是一个一维数组,对元素取址)
b[i] == *(p + i), //b[i] ==*(&b[i]),*&抵消,b[i]也是第i行的首地址(也可以这样理解,比如b[i][4],b[i]可以看作是数组名,也就是这个一维数组的地址)
b[i] + j == &b[i][j], //b[i][4]这个一维数组偏移j位,就是b[i][4]中第j个元素的地址也就是&b[i][j]
b[i][j] == *(*(p + i) + j) //全部替换一下 再取值 得出b[i][j]的值,也就是a[3][4]这个二维数组第i行第j列的值
楼上int (*p)[4]等价于int p[4];是不可能的吧 前边是数组指针后边是数组啊
----------------解决方案--------------------------------------------------------
楼上的,偶是Paladin
----------------解决方案--------------------------------------------------------
???
----------------解决方案--------------------------------------------------------
晕了啊`````
----------------解决方案--------------------------------------------------------
谢谢大家``明白了````
----------------解决方案--------------------------------------------------------
[QUOTE]楼上int (*p)[4]等价于int p[4];是不可能的吧 前边是数组指针后边是数组啊[/QUOTE]
这个还是要说一下的``
int (*p)[4] 不是指针数组```是一个指向有一个含4个整型元素的一维数组的的指针变量``
当然我也错了``这个完全不等价于P[4]```
因为这也是一个2级指针```
----------------解决方案--------------------------------------------------------
"int (*p)[4] 不是指针数组"
我说的是 数组指针, 是指向一个含有4个整型元素的一维数组 也就是我这里的每一行 行指针
当然也是个指针了
----------------解决方案--------------------------------------------------------