二维阵列存储器映射C.

时间:2014-05-11 20:30:06

标签: c arrays pointers

我有一个2d数组和一个指向其第一个元素的指针:

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是列数。 但是......它给了我错误的答案。 我猜表达式&#39; p + sizeof(int)* x * n + y&#39;造成了这个问题。请帮我纠正一下。 感谢。

2 个答案:

答案 0 :(得分:3)

您不需要sizeof(int) - 指针算法自动处理元素大小 - 更改:

p + sizeof(int)*x*n + y

为:

p + x*n + y

答案 1 :(得分:1)

有几个错误。保罗K指出了第一个。第二个是你必须使用:

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

而不是

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

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