首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >指针和多维数组问题

指针和多维数组问题
EN

Stack Overflow用户
提问于 2014-12-03 02:38:19
回答 1查看 83关注 0票数 2

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

代码语言:javascript
复制
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 (int *b = *a; b != *a + col; ++b)的第二行的第一行中。*a不是取消引用指针吗?
  3. 我不清楚第二个发言是如何运作的。我理解它执行的顺序,但是我不清楚第一个语句和第二个语句之间的关系。任何澄清都会很有帮助。
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-03 03:03:04

指针有它们所指向的类型。除了void *之外,指针只能保存该类型对象的地址。

在第一行:由于您正在遍历数组的每一行,指针必须指向整行(而不是一个int)。

在第二行中,*a执行取消引用a*a。总是等同于a[0]。由于a指向一行,所以a[0]指定该行。

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

第一圈在每一行上,第二圈在赫列上。它的结构与:

代码语言:javascript
复制
for (int i = 0; i < row; ++i)
    for (int j = 0; j < row; ++j)
        arr[i][j] = ++cnt;

但是,您使用的是指针,而不是后来添加到指针中的整数偏移量。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27262726

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档