指向二维矩阵语法的指针
pointer to 2 d matrix syntax
抱歉,但我对c++仍然很陌生-从之前的问题正确Aliasing vector, (*M)[i][j]
和*(M[i][j])
是如何不同的(其中M是指向整数指针数组的指针)?
据我所知,似乎前者相当于*(*((*MPtr) + i) + j))
,后者与*(*(*(MPtr + i) + j))
相同(其中MPtr是指向M的指针)。然而,我不确定(MPtr + I)的含义-我应该如何解释这一点?
(M*)(i][j]
这是一个语法错误(实际上是两个)。如果你的意思是
T (*M)[i][j]
而不是,那么这是指向T
类型元素的i x j
数组的指针的声明。相比之下,
(*M)[i][j]
本身是一个表达式,其中M
要么是指向至少二维数组的指针,要么是指向指向指针的指针。然后对M
解引用,得到的数组或双指针分别被索引。
*(M[i][j])
仅当M
是指针数组的数组(或重载operator*
的任何类)时有效,并且它表示"解除对数组M
的[i][j]
元素的指针的引用"。
M
是一个指向二维数组的指针):
(*M)[i][j] = M[0][i][j]
所以这是数组的第[i][j]
个元素(如预期的那样)。相比之下,
*(M[i][j]) = M[i][j][0]
这是错误的,当M
是一个指针,只有一个数组(读取超过数组边界调用未定义的行为)。
当你有一个数组时,计算机存储一个指向数组开头的指针。那是Mptr。如果你写Mptr + i,它将被翻译为,Mptr的内存地址+ Mptr类型的大小* i。
sintax你写的是错误的,因为你dereferate M[我][j]不是一个内存地址,除此之外,如果你写* (M[我]),而不是* M[我],我认为*更高的领先,在第一种情况下M +我得到dereferated和redereferated secound M得到dereferated第一,又说我和dereferated * ((*) + i),这相反的顺序会导致你的我像一个j .编写代码的方式你认为它更可读,不喜欢这 * (* (* ( MPtr + i) + j) .
- 1d 智能指针不适用于语法 (*)++
- 助记符和指向成员语法的指针
- QMetaObject invokeMethod的基于函数指针的语法
- 共享指针和具有自定义删除程序的唯一指针之间的语法差异背后的任何原因
- 使用基类指针调用基类的值构造函数的语法是什么?
- C++语法差异:二维和一维数组(指针算术)
- C++中未命名函数指针的语法
- c++ 获取非语法使用"&"创建指针
- C++语法中的函数指针
- 存储函数指针的正确语法
- 我想获取点的属性,它报告错误 C3867:"point::output_x":非标准语法;使用"&"创建指向成员的指针
- 非标准语法,使用 & 创建指向成员的指针
- 将引用绑定到指针的语法是什么?(各种)
- 如何使用二维语法访问指针
- 带有自定义类的共享指针语法背后的任何原因,如下所示
- 非标准语法使用 '&' 创建指向成员 C++ 的指针
- 如何在不更改现有函数语法的情况下将普通指针替换为共享指针
- C++指向函数声明语法的指针
- 难以理解指针语法C++
- 数组的语法指针C++