二维数组内存映射C

4

我有一个二维数组和一个指向它第一个元素的指针:

int s[100][100];
int* p; 

读取一些值并保存在 s 中后:

p=&s[0][0]

好的,现在我想要通过访问p来打印s元素:
for (x = 0; x<m; x++)
{
    for (y = 0; y<n; y++)
    {
        printf("%d ", *(p + sizeof(int)*x*n + y));
    }
    printf("\n");
}

其中m是行数,n是列数。 但是...它给我错误的答案。 我猜测表达式'p + sizeof(int)*x*n + y'是引起问题的原因。请帮我纠正它。 谢谢。

2个回答

3
您不需要使用sizeof(int) - 指针算术会自动处理元素大小 - 更改为:
p + sizeof(int)*x*n + y

to:

p + x*n + y

1

有几个错误。第一个错误是由Paul K指出的。第二个错误是你必须使用:

    printf("%d ", *(p + x*100 + y));

替代

    printf("%d ", *(p + x*n + y));

否则,您将从错误的行中获取数字。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接