指向指针(二维数组)的指针作为输入参数

Pointer to a pointer (2D array) as input parameter

我 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 matrix" 的值;我要p作为入参,必须是只读的!

请问,如何将指针到指针传递给将元素标记为只读的函数?

提前感谢您的帮助,抱歉我的英语不好。

试试这个:

typedef const int *cint_ptr_t  ;

void func(const cint_ptr_t  *p) {
}

请记住,您希望将二维数组的元素设为常量并且指向每行开头的指针

void func(const int * const *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