我不明白为什么我的答案是4?谁能解释一下矩阵和指针吗。我的意思是,我知道矩阵是什么,它们是一个2行表,但我不知道如何在矩阵中使用指针,比如这里的例子:
int m[][3]={1,2,3,4,5,6,7,8,9};
int (*b)[3]=&m[0];
int r=**(++b);
std::cout << r;
在我看来,在实际使用中不建议这样玩指针,而只是为了学术理解:
int m[][3]={1,2,3,4,5,6,7,8,9};
int (*b)[3]=&m[0]; // b is a pointer to an array of 3
// and is initialized to point to 1st row of m.
int r=**(++b);
在这里,我们首先递增b
。这意味着b
现在指向m
的第二行
然后我们两次取消引用它,给出m
(4)第二行的第一个元素
如果我们将m[][3]={1,2,3,4,5,6,7,8,9};
视为m[][3]={ {1,2,3}, {4,5,6}, {7,8,9} };
,答案会更容易理解。
(*b)[3] = &m[0]
是指向长度为3
的数组的指针,该数组指向m[][3]
中元素的第一行,即{1, 2, 3}
。
当您递增它(通过执行++b
)时,它将指向m[][3]
中的第二行元素,即{4, 5, 6}
。
然后,r
被分配给b
所指向的值,因为它被取消引用了两次,所以它将是b
所指向的行中的第一个整数值。
+------+------+------+ +------+------+-------+
| 1 | 2 | 3 | | 4 | 5 | 6 |
+------+------+------+ +------+------+-------+
Gets the value '4' ^ and not the row's address,
| which *b points to
int r = **b----------------------------+