使用指针运算访问二维数组的值

问题描述 投票:0回答:1

我正在研究多指针,我观看了这个视频,其中解释说,如果我们想要访问二维数组的值,我们可以使用像这样的双重间接寻址:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char **argv){
    
    int a[2][2] = {{1,2},{3,4}};
    int** p = &a[0][0];

    printf("%d", **p);
    
    return 0;
}

但是我得到了

segmentation fault
。如果我改为使用单一间接:

    int a[2][2] = {{1,2},{3,4}};
    int** p = &a[0][0];

    printf("%d", *p);

我得到了正确的值

a[0][0] = 1
。现在,如果我在单向中使用指针算术,

    printf("%d", *(p+1));

我得到

a[1][0] = 3
,这是有道理的,因为如果我
printf("%d", sizeof(p))
,我得到 8 个字节。

现在我的问题是,如何使用指针算术得到

a[0][1]
a[1][1]

c pointers memory multidimensional-array
1个回答
0
投票

提示:启用所有警告

int** p = &a[0][0];
应该警告一下。

取决于间接级别

#define DIM1 7
#define DIM2 2

int a[DIM1][DIM2] = {{1,2},{3,4}};

int (*q)[DIM1][DIM2] = &a;
printf("%d", ***q);

int (*r)[DIM2] = a;
printf("%d", **r);

int *t = a[0];
printf("%d", *t);

int u = a[0][0];
printf("%d", u);

int v = a[1][1];
printf("%d", v);
© www.soinside.com 2019 - 2024. All rights reserved.