我 2 个月前开始在大学学习 C++,我想弄清楚如何将动态二维数组(指向指针的指针)作为输入参数传递给函数。 我有这个动态二维数组:
int **p;
p = new int*[R];
for(i=0; i<R; i++)
p[i] = new int[C];
现在我想将这个指针 p 作为输入参数传递给一个函数,使用 const。我的意思是我希望函数不能修改矩阵的元素。
我这样试过:
void func(const int **p) {
}
但是我得到这个错误:
main.cpp:19:11: error: invalid conversion from 'int**' to 'const int**' [-fpermissive]
main.cpp:9:6: error: initializing argument 1 of 'void func(const int**)' [-fpermissive]
我尝试使用 typedef 并且它有效,但它不是恒定的。 如果我这样做:
typedef int** abc;
void func(const abc p);
main() {
abc p;
...
func(p);
}
源代码编译但函数'func'能够修改“p矩阵”的值;我要 p 作为输入参数,它必须是只读的!
请问,如何将指针到指针传递给将元素标记为只读的函数?
提前感谢您的帮助,抱歉我的英语不好。
最佳答案
您的const int **p
应该是const int * const *p
。从 const int **
到 int **
的转换不允许是隐式的,因为它可能违反所指向值的常量性。要了解原因,请查看以下摘自 C 标准 (§6.5.16.1) 的代码摘录:
const char **cpp;
char *p;
const char c = 'A';
cpp = &p; // constraint violation
*cpp = &c; // valid
*p = 0; // valid
如果 cpp = &p
是一个有效的赋值,后续代码将能够将 c
的值设置为 0
,尽管值是 const char
。
关于c++ - 指向指针(二维数组)的指针作为输入参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34255850/