我正在自学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;
}for (int(*a)[col] = arr; a != arr + col; ++a)的第一行中。为什么int(*a)[col] = arr;需要[col]来使for循环正确执行?for (int *b = *a; b != *a + col; ++b)的第二行的第一行中。*a不是取消引用指针吗?发布于 2014-12-03 03:03:04
指针有它们所指向的类型。除了void *之外,指针只能保存该类型对象的地址。
在第一行:由于您正在遍历数组的每一行,指针必须指向整行(而不是一个int)。
在第二行中,*a执行取消引用a。*a。总是等同于a[0]。由于a指向一行,所以a[0]指定该行。
a[0]是一个数组,所以当它用于初始化b时,它会衰减到指向该行第一个元素的指针。
第一圈在每一行上,第二圈在赫列上。它的结构与:
for (int i = 0; i < row; ++i)
for (int j = 0; j < row; ++j)
arr[i][j] = ++cnt;但是,您使用的是指针,而不是后来添加到指针中的整数偏移量。
https://stackoverflow.com/questions/27262726
复制相似问题