指向作为输入参数的指针(2D数组)的指针
Pointer to a pointer (2D array) as input parameter
我两个月前开始在大学学习C++,我正试图找出如何将动态2d数组(指针对指针)作为输入参数传递给函数。我有一个动态二维阵列:
int **p;
p = new int*[R];
for(i=0; i<R; i++)
p[i] = new int[C];
现在,我想使用const将这个指针p作为输入参数传递给一个函数。我的意思是,我希望函数不能修改矩阵的元素。
我试过了:
void func(const int **p) {
}
但我得到了这个错误:
main.cpp:19:11:error:从"int**"到"const"的转换无效int**'[-fpermission]
main.cpp:9:6:错误:初始化"void func(const int**)"[-fpermission]的参数1
我试着使用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
。
void func(const int * const *p) {
}
试试这个:
typedef const int *cint_ptr_t ;
void func(const cint_ptr_t *p) {
}
请记住,您希望常量2D数组的元素和指向每行开头的指针
相关文章:
- 指向指向字符数组的指针数组的指针
- 通过指向指针数组的指针访问子类的属性
- C++,指针数组,指向双链表中的条目
- 在C++中,如何初始化指向wchar_t*的指针数组(生成wchar_t**)
- C++从函数指针数组调用函数
- 关于指向指针数组的指针
- 将返回值存储在函数指针数组的指针中是如何工作的?
- 将链表转换为指针数组时出错
- C++ 对象指针数组的复制构造函数
- C++ - 循环访问指针数组会导致错误
- 删除指针数组 (C++) 中的元素
- 如何循环访问 cpp 中的函数返回的字符指针数组
- 将函数指针数组中的函数指针作为模板参数传递
- Google Or-Tools Glop:如何创建指向 const 对象的指针数组?
- 具有推导参数的模板函数指针数组变量
- 如何模板化堆栈分配的多态指针数组到接口,包括派生类型的相应点?
- C++指针数组到字符数组中的特定位置
- 如何在C++中复制指针数组的数据
- 初始化类中的指针数组,并在另一个类中检索它
- 尽管直接设置了指针数组,但仍为空