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

标签 c++ arrays pointers parameters constants

我 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/

相关文章:

c++ - 从这里实例化错误

c++ - boost asio async_read_some 只读取数据片段

javascript - 动态更改 Highcharts 中一系列的数据

c - 将元素存储和访问到嵌套结构的数组

javascript - Lodash 更新另一个数组 Chain/Map 中的元素值

c++ - 奇怪的 C++ 指针声明

冒泡排序的 C++ 问题

C++ 在 vector 中访问 vector 中的字符串

c - 指向 char 的指针数组如何保存字符串而不是地址?

c - 数组访问,指针混淆