c++ - 指针和多维数组题

标签 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; 一个!= arr + col;++a)。为什么 int(*a)[col] = arr; 需要 [col] for for 循环是否正确执行?

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

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

最佳答案

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

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

在第二行中,*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;

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

关于c++ - 指针和多维数组题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27262726/

相关文章:

C++ Speex 到 Flac 包装器/库

Java 数据库显示国家数据库表中的所有国家信息

c++ - std::function 签名指针 vs 指针引用 = 没有区别?

java - Python 与 Java/C 的集成

C++ 浮点控制台输出问题

c++ - JOYINFOEX::dwButtonNumber 是什么?

c# - 在 C# 中编码 C 数组 - 简单的 HelloWorld

arrays - Powershell验证我的数组元素类型

C++ 函数,静态变量返回数组中的下一个值

C指针数组/指针数组消歧