指针和多维数组问题

时间:2014-12-03 02:38:20

标签: c++ arrays pointers multidimensional-array

我正在自学C ++并且目前正在学习多维数组。以下是我正在使用的代码。代码下面是我遇到问题的问题/概念。

int main(){
    const unsigned row = 4, col = 4;
    int arr[row][col], cnt = 0;

    for (int(*a)[col] = arr; a != arr + col; ++a){
        for (int *b = *a; b != *a + col; ++b){
            *b = cnt;
            ++cnt;
        }
    }

    system("pause");
    return 0;
}
  1. 在for语句for (int(*a)[col] = arr; a != arr + col; ++a)的第一行。为什么int(*a)[col] = arr;需要 [col]循环的for是否正确执行?

  2. 在第二行for语句for (int *b = *a; b != *a + col; ++b)的第一行。 *a是否取消引用指针?

  3. 对于我的工作原理,我不清楚第二个声明。我理解它执行的顺序,但我不清楚第一个for语句和第二个语句之间的关系。任何澄清都会非常有帮助。

1 个答案:

答案 0 :(得分:0)

指针有一种他们指向的类型。除void *外,指针只能保存该类型对象的地址。

在第一行中:由于循环遍历数组的每一行,因此指针必须指向整行(而不是指向单个int)。

在第二行中,*a取消引用a*a。始终等同于a[0]。由于a指向一行,a[0]指定该行。

a[0]是一个数组,所以当它用于初始化b时,它会衰减到指向该行第一个元素的指针。

第一个tlook环绕每一行;第二个循环遍历ech列。它的结构与:

相同
for (int i = 0; i < row; ++i)
    for (int j = 0; j < row; ++j)
        arr[i][j] = ++cnt;

除了使用指针而不是稍后添加到指针的整数偏移量。