我有一个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;造成了这个问题。请帮我纠正一下。 感谢。
答案 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));
否则,您将从错误的行中获取数字。