双指针 (int**) 和双括号,用于从 2D 数组中获取值
double pointer (int**) and double brackets to get the value from a 2D array
我以为我在C风格的数组上还可以,显然不是。我想不通。
假设我声明了一个函数
void RotateMatrix(int ** matrix, int n)
{
auto x = matrix[0][0];
}
(假设矩阵是正方形的(。从主功能驱动它
void main()
{
int matrix[4][4] =
{
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12},
{13, 14, 15, 16}
};
RotateMatrix((int**) matrix, 4);
}
基本上,matrix[0][1]
会导致缓冲区溢出。调试它时,matrix[0][0]
尝试转到地址0x0000000200000001
,数组中前 8 个字节的组合,大概因为 int 是 4 个字节,int*
是 8 个字节,int**
是指向 ints 指针的指针,因此它将前 2 个矩阵条目视为int*
。然而,这让我感到困惑,因为像 bobobobo 关于如何将多维数组传递给 C 中的函数的答案C++似乎表明您可以使用int**
方法。我很困惑。我看到其他SO帖子也说了同样的话,那么为什么它对他们有用呢?
我以为matrix[0][0]
它会做matrix[0]
的地址加offset 0 * sizeof(int)
(这仍然是第一个元素(
数组
的衰减不是指向指针的指针,而是衰减为指向数组的指针。所以数组int matrix[4][4]
衰变成int **
,而是衰变成int (*)[4]
。
这就是为什么您需要摆脱演员表并更改RotateMatrix
的签名。
相关文章:
- 2D数组来自文本输入,中间有空格
- 如何使用用户输入在C++中正确填充2D数组
- 如何在C++中检查2D数组中负值的输入验证
- 当我在main中声明了我的2d数组时,为什么我的程序会退出
- 如何将以逗号和空格分隔的整数读取到 2D 数组中?
- 如何在C++函数中声明静态 2D 数组?
- 我已经阅读了很多关于 2d 数组的信息,但我在作业中使用它时遇到了麻烦
- 使用矢量将文本文件中的输入存储到 2D 数组中
- 获取 2D 数组 c++ 中的所有数字对
- 这是使用回溯的 nqueen 问题,但我使用了动态 2d 数组,我的程序编译良好,但不返回任何输出
- 如何在构造函数中使用初始值设定项设置具有相同值的 2d 数组?
- 在 Python 和 c++ 2d 数组初始化之间.这是怎麽?为什么呢?
- 如何创建一个所有行大小不同的 2D 数组,并且用户将指定每行将有多少个元素?
- 使用指针算法修改函数中的 2D 数组
- 在C++中初始化和打印 2D 数组
- 有没有办法使用输入的维度初始化 2d 数组中的所有项目而不循环C++?
- C++ 2D 数组写入多个位置
- 检测到堆损坏:在正常块 c++ 动态 2D 数组之后
- 如何从initializer_list初始化 2D 数组
- 交换函数不是在 C++ 中交换 2D 数组的元素