传递矩阵到函数的问题
Issue with passing a matrix into a function
我能做什么…我需要传递一个矩阵到函数中?
error C2664: 'WriteMatrixOut' : cannot convert parameter 1 from 'char [480][640]' to 'char ** '
指向的类型是不相关的;转换需要reinterpret_cast、c风格强制转换或函数风格强制转换
class Image
{
public:
char mm[480][640];
void WriteMatrixOut(char **mm);
}
声明为void WriteMatrixOut(char mm[480][640]);
char**
和char[x][y]
是根本不同的,不能强制转换。
当您执行char array[100][100]
时,编译器将在一个地方分配所有内容,根本不涉及指针。它也是等价的:
typedef char innerArray[100]; innerArray mm[100];
所以它是100个块,每个块100个字符。sizeof(mm)
将是10,000字节,将mm转换为char*
比将其转换为char**
更有可能。
然而,如果你使用char**
动态分配一个数组的数组,你有一个指针指向一个连续的指针数组;这些指针引用内存中的任意位置,每个位置都具有任意长度。(这也允许使用锯齿数组。)这两种内存布局是完全不同的。
现在,您可能想在参数声明中使用相同的类型:
char mm[100][100];
void writeMatrixOut(char mm[100][100]);
但是这是不安全的,因为C使问题更加混乱。foo(int x[3])
、foo(int x[])
和foo(int *x)
都是等价的。我不确定这是如何工作的嵌套数组,但至少一个数组的维度将不会由编译器检查当你传递一个参数。
typedef char Matrix[100][100];
Matrix mm;
void writeMatrixOut(Matrix &mm); // might even be 'const Matrix &'
但即使这样,也不能赋值或返回数组。要使数组表现正常,必须将它们包装在一个结构体或类中:
struct Matrix { char elements[100][100]; }
Matrix mm;
void writeMatrixOut(Matrix &mm); // might even be 'const Matrix &'
c++ 03/c++ 11还包含一个数组<>包装器类,它可以为您做这件事,但是对于嵌套数组来说,它有点笨拙:
// namespace std::tr1:: in C++03, std:: in C++11
typedef array<100, array<100, char>> Matrix;
相关文章:
- 类C++中的函数问题(LNK2019和LNK1120错误)
- 返回不停止函数,递归函数问题?(编程练习,动态规划,Levenshtein 回溯)
- 变分模板递归构造函数问题
- C++函数问题中的数组分配
- C++中嵌套在另一个 LinkedList 中的 LinkedList 整数上的回调函数问题
- C++重载构造函数问题
- 二叉搜索树析构函数问题
- C++ vector<pair<int,int>> std::all_of() 函数问题(重定向到头文件)
- 迷宫构造函数问题 [线程 1:EXC_BAD_ACCESS(代码 = 1,地址 = 0x8)]
- C++函数问题中的 IF 语句
- 函数问题,未定义的引用错误
- C++ 指针无效函数问题
- C++函数问题 = 帮助我理解基本概念
- 由于基于接口的编程,遇到 C++ 虚拟模板函数问题
- C++二进制树递归析构函数问题
- 构造函数问题<无法读取内存>
- 构造函数问题
- C 时间函数问题
- 另一个类中的类的构造函数问题
- C与C++函数问题