c语言二维数组指针坐标,C语言指向二维数组的指针,该如何处理

C语言指向二维数组的指针

本帖最后由 u011741688 于 2013-09-24 23:59:26 编辑

for(i = 0;i 

{

for(j = 0;j 

printf("%d\t",*(p + i) + j);

printf("\n");

}

*(p + i) + j  等效于 array[i] + j

p + 0 + 0 == array[0] + 0 == array[0][0]

p + 0  == array[0]

*(*(p+i)+j)  这个要怎么去理解。

嗯嗯  多多指教,谢谢!!

二维数组

c语言

指针

分享到:

------解决方案--------------------

*(*(p+i)+j)  是  array[i][ j]

------解决方案--------------------

http://book.51cto.com/art/201207/348002.htm

------解决方案--------------------

*(*(p+i)+j)这是取i行j列的元素,计算机寻址方式都是按一维的,就是以这种方式*(*(p+i)+j)进行寻址,对于多维的数组,你若采用array[i][j],array[i][j][k]在有的编译器里面,就有可能取不到正确的值

------解决方案--------------------

char **p;

char A[M][N];

p = A;

p+i 是一个指针 指向 *(p+i)

*(p+i)还是一个指针 指向*(*(p+i))

*(p+i)+j 还是一个指针 指向*(*(p+i)+j)

*(*(p+i)+j) 就是具体的值了

p+i  对应 A+i

*(p+i) A[i]

*(p+i)+j  对应 A[i] +j

*(*(p+i)+j) 对应 A[i][j]

------解决方案--------------------

char *p;  //指针

*p    //表示只想的数据

char **p  //指向指针的指针

//同理   *p   //指向的数据(指针)

------解决方案--------------------

仅供参考//在堆中开辟一个4×5的二维int数组

#include 

#include 

int **p;

int i,j;

void main() {

p=(int **)malloc(4*sizeof(int *));

if (NULL==p) return;

for (i=0;i<4;i++) {

p[i]=(int *)malloc(5*sizeof(int));

if (NULL==p[i]) return;

}

for (i=0;i<4;i++) {

for (j=0;j<5;j++) {

p[i][j]=i*5+j;

}

}

for (i=0;i<4;i++) {

for (j=0;j<5;j++) {

printf(" %2d",p[i][j]);

}

printf("\n");

}

for (i=0;i<4;i++) {

free(p[i]);

}

free(p);

}

//  0  1  2  3  4

//  5  6  7  8  9

// 10 11 12 13 14

// 15 16 17 18 19

------解决方案--------------------

*(*(p+i)+j)  这个要怎么去理解。

类似与*(*(p+i+j));

*(p+i)+j ,已经是取了p+i+j的值吧,然后再加一个*,应该是错了吧!

------解决方案--------------------

*(*(p+i)+j) 等价于p【i】【j】,*(p+i)是第i行第零列元素的地址,也是i行的首地址,,因此*(p+i)

就成了列地址,*(p+i)+j就是第i行第j列元素的地址,再加上一个指向运算符*,就表示第i行第j列的元素了

------解决方案--------------------

C语言里面只有一维数组。

比如一个数组 a[4][5],20个元素,那么只要你的下标和在20以内都是合法的,比如a[1][10]...

*(*(p+i)+j),表示第i行j个元素

*(p+i)看做是一个指针,指向第i行的第一个元素,+j表示偏移j个元素,再解除引用*(*(p+i)+j)就是表示第i行j个元素

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值