如何在矩阵中使用指针.这行代码的作用是什么:int r=**(++b);

how to use pointers in a matrix. what does this line of code do/mean: int r=**(++b);

本文关键字:int 是什么 作用 ++b 代码 指针      更新时间:2023-10-16

我不明白为什么我的答案是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----------------------------+