double pointers and 2d arrays in c

前端 未结 1 1315
暖寄归人
暖寄归人 2021-01-20 18:21

I\'m trying to access a 2D array using double pointer

int x[2][2] = {{10, 20},{30, 40}};
int *xp;
int **xpp;

printf (\"%d  %d\\n%d  %d\\n\", x[0][0], x[0][1         


        
1条回答
  •  北恋
    北恋 (楼主)
    2021-01-20 18:41

    Rather than ...

    int x[2][2] = {{10, 20},{30, 40}};
    int **xpp;
    xpp = (int**)x;
    

    ... realize that x in the expression converts to a pointer the address of the first element. The first element of x is x[0] which has a type of int [2], so the type needed is int (*)[2] or pointer to array 2 of int.

    int (*p)[2];
    p = x;
    
    printf ("%p\n", (void *) p);
    printf ("%p\n", (void *) *p);
    printf ("%d\n", **p);
    printf ("%d %d %d %d\n", p[0][0], p[0][1], p[1][0], p[1][1]);
    

    Output

    0xffffcbd0 (sample)
    0xffffcbd0 (sample)
    10
    10 20 30 40
    

    Tip: avoid casting - it often hides weak programming.

    0 讨论(0)
提交回复
热议问题