如果我创建一个文件:
TEST.CPP:
void f(double **a) {
}
int main() {
double var[4][2];
f(var);
}
Run Code Online (Sandbox Code Playgroud)
然后运行:g ++ test.cpp -o test
我明白了
test.cpp: In function `int main()':
test.cpp:8: error: cannot convert `double (*)[2]' to `double**' for argument `1'
to `void f(double**)'
Run Code Online (Sandbox Code Playgroud)
为什么我不能这样做?
是不是double var [4] [2]和double**var一样然后分配内存?
Joh*_*itb 18
查看Excursion:Multi Dimensional Arrays,它描述了如何将多维数组作为参数传递给函数.基本上,您希望将代码更改为:
// same as void f(double (*a)[2]) {
void f(double a[][2]) {
}
int main() {
// note. this is not a pointer to a pointer,
// but an array of arrays (4 arrays of type double[2])
double var[4][2];
// trying to pass it by value will pass a pointer to its
// first element
f(var);
}
Run Code Online (Sandbox Code Playgroud)
除了最后一个维度之外的所有维度都必须为被调用函数所知.否则索引数组,编译器将无法计算到数组中值的正确距离(a [1]是sizeof(double[2])
远离[0]的字节).
您似乎希望能够在不知道尺寸大小的情况下接受阵列.您可以使用模板:
template<std::size_t N>
void f(double a[][N]) {
// N == 2 for us
}
int main() {
double var[4][2];
f(var);
}
Run Code Online (Sandbox Code Playgroud)
编译器将为函数使用的每个N值制作(实例化)该模板的副本,自动推导出正确的N.
归档时间: |
|
查看次数: |
10198 次 |
最近记录: |