指针处理多维数组的列

指针处理二维数组的行比较简单,但处理二维数组的列就没那么容易了,因为数组是按行而不是按列存储的。下面的循环对数组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])

posted @ 2022-12-02 10:23  木凌云  阅读(36)  评论(0)    收藏  举报