我能做什么...我需要将矩阵传递给函数?
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);
}
答案 0 :(得分:2)
将其声明为void WriteMatrixOut(char mm[480][640]);
。
答案 1 :(得分:1)
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来避免这种情况:
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;