如何在矩阵中使用指针.这行代码的作用是什么:int r=**(++b);
how to use pointers in a matrix. what does this line of code do/mean: int r=**(++b);
我不明白为什么我的答案是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----------------------------+
相关文章:
- "类模板示例<int>;"语句对 C++11 是什么意思?
- int数据类型的指针指向的是什么,如果是一个类的私有数据成员,我们创建了该类的两个对象?
- 是什么导致了这种使用三进制而不是短整型的有符号int到无符号int转换
- C++ 未初始化的本地(非全局)int 数组中的元素类型到底是什么?
- map<string, int> m= {}; 在C++中是什么意思?
- 行 - " vector<int> used(adj.size(), 0); "是什么意思?
- 使输出流式处理运算符适用于 boost::variant<std::vector<int>、int、double 的正确方法是什么>
- 代码中的"vector<<int>vector>&index"是什么意思?
- 在这种情况下,int**在C中是什么意思
- "1L << count"是什么意思?如何使用超出"unsigned long long int? "范围的语句编号打印?
- "int(i)=1;"是什么意思?
- freq_table[field_pm_value] = map<string, int>(); 是什么意思?
- 统一初始化是隐式发生的,即使 int 强制转换运算符是使用 explicit 关键字声明的.原因是什么?
- map<int,int>的*迭代器是什么?它不是pair<int,int>
- 在C#中等效于未签名的长Int是什么
- "cannot Convert vector<int>* to int"是什么意思?
- <T::* int>是什么意思?
- C++中的新Bytef[int]是什么
- *new int是什么意思?
- A<int(int)>是什么意思?这项技术叫什么名字?