首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

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

2013-10-07 
C语言指向二维数组的指针本帖最后由 u011741688 于 2013-09-24 23:59:26 编辑for(i 0i N++i){for(j

C语言指向二维数组的指针
本帖最后由 u011741688 于 2013-09-24 23:59:26 编辑


for(i = 0;i < N;++i)
{
for(j = 0;j < N;++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 <stdio.h>
#include <malloc.h>
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个元素

热点排行