尽管使用指针将其初始化为一维,但 C++ 仍将数组用作多维

标签 c++ arrays pointers

显然这段代码有效。

int main()
{
const int size = 5;
int *triangle[size], i, j;

for (i = 0; i < size; i++){
    triangle[i] = new int[i + 1];
    for (j = 0; j < i + 1; j++)
        triangle[i][j] = i + 1;
}
for (i = 0; i < size; i++){
    for (j = 0; j < i + 1; j++)
        cout << triangle[i][j];
    cout << endl;
}
for (i = 0; i < size; i++)
    delete [] triangle[i];

return 0;
}

它给它输出 1个 22 333 4444 55555

但是不写 int*triangle[size] 表明这是一个一维数组,我们没有指定任何关于第二个参数的信息。但是后来我们通过编写 triangle[i][j] = i + 1; 来使用它就像一个二维数组;我不明白 j(第二个参数)来自哪里。它不应该给出编译错误或其他什么吗?

最佳答案

int *triangle[size] 是一个指针数组。在你的 for 循环中你做

triangle[i] = new int[i + 1]

将每个指针设置为指向一个数组。我们把它放在一起

triangle[i][2]
         +  +
         |  +> access the element of the array the ith pointer points to
         |
         +-> Accesses the ith pointer

关于尽管使用指针将其初始化为一维,但 C++ 仍将数组用作多维,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53124785/

相关文章:

c++ - 了解递归函数中的数组和指针

c++ - 函数指针不是函数或函数指针

c - C中使用不同维度数组的指针数组等价

c++ - 在 opencv 和 Qt 中合并视频

java - 以java快速方式写入/读取 float 组

c - "Access violation reading location"C 错误

c - 如何对数组的一个子集进行平均并将结果存储在另一个数组中?

c++ - 这段代码是什么意思

c++ - 为什么在成功调用 EventWrite 函数后我的 Windows 日志为空

c++ - C++ 中的内联函数 - 条件