【发布时间】:2014-01-20 16:43:17
【问题描述】:
我正在尝试理解 C 中二维数组的指针算法。
void pmanipulation(int arr[][5],int rows)
{
printf("arr=%d arr+1=%d *(arr)=%d *(arr+1)=%d\n",arr,arr+1,*(arr),*(arr+1));
}
在上面的小代码sn-p中,我观察到arr+i和*(arr+i)打印出来的值显然没有什么不同。为什么会这样?我知道在 C 中 arr+i 将给出二维矩阵第 i 行的基地址,但 *(arr+i) 不应该在该地址打印元素吗?
谢谢
【问题讨论】:
-
*(arr+i)是一个长度为 5 的数组。你能用printf()打印数组吗?是的,但只有char数组(= C 字符串)。你有一个int数组。还有*(arr+i)给你第i行第一个元素的地址,而arr+i给你整个第一行的地址,这与*(arr+i)相同,但有细微的差别,即*((arr+i)[n])正在逐步进入n*5的元素,而(*(arr+i))[n]仅在n的步骤中。 -
@mb84- 非常感谢您的解释。