显然这段代码有效。
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/