指针处理多维数组的列
指针处理二维数组的行比较简单,但处理二维数组的列就没那么容易了,因为数组是按行而不是按列存储的。下面的循环对数组a的第i列清零:
int a[NUM_ROWS][NUM_COLS], (*p)[NUM_COLS], i;
for (p = &a[0]; p < &a[NUM_ROWS]; p++)
(*p)[i] = p;
这里把p声明为指向长度为NUM_COLS的整形数组的指针。在(*p)[NUM_COLS]中,*p是需要使用括号的;如果没有括号,编译器将认为p是指针数组,而不是指向数组的指针。表达式p++把移到下一行的开始位置。在表达式(*p)[i]中,*p代表a的一整行,因此(*p)[i]选中了该行第i列的那个元素。(*p)[i]中的括号是必要的,因为编译器会将*p[i]解释为*(p[i])。

浙公网安备 33010602011771号