我知道之前可能会问这个问题,但我不明白这个问题:
以下是我要检查的代码,我会对此进行评论。请让我知道我哪里错了
int **A; // declaring a pointer to a pointer
A = new int*[n]; // assigning that pointer to a newly-allocated
// space (on the heap) for an array
// of [size n] of pointers to integers
for (i = 0; i < n; ++i) // looping from 0 to n-1
A[i] = new int[n]; // assigning each slot's pointer to a
// new array of size n?
for (i = 0; i < n; ++i) // loop through all the rows
for (j = 0; j < n; ++j) // loop through each column for the current row
A[i][j] = 0; // assign the value to 0
请让我知道我哪里错了。我不明白A = new int*[n];
我只是想用常识来解决这个问题,但我遇到了麻烦。
谢谢!
答案 0 :(得分:2)
什么是“阵列”?它是一块内存,由地址表示。
如果你想要一个二维数组,那么你需要批次这些数据块 - 你需要知道每个的位置。这意味着您需要一个地址数组,换句话说,需要一个int*
数组 - 它会为您提供int**
。
new int*[n]
做的是为地址数组分配内存,在每个地址中,你去放置int
数组的地址,通过{{1}分配}。
答案 1 :(得分:2)
您的代码和评论是正确的。为了消除对指针的困惑:
n
),创建指针数组。数组中的每个指针都指向一个int数组。int a[n][n];
,因为大小未知。这是一个图表:
> [ ] //">" is a pointer, pointing at an array ([ ])
[ ] [ ] [ ]
> [ ^ ^ ^ ] // The array is an array of pointers "^", each of which points to an array
答案 2 :(得分:2)
所以你在这里基本上是一个指向数组的指针数组。换句话说,你有一个指针数组,其中数组中的每个指针指向另一个数组。
这是我发现的一张图片:
'[]'运算符使您可以使用索引访问数组中的元素。所以A [i]正在访问A数组中的i元素。
A[i] = new int[n];
这里你将i的指针放在一个数组中以指向一个新数组。
所以A[i][j]
实际上意味着在A [i] [j]中你正在访问数组中i的元素所指向的j元素。