两个月前,我在大学开始学习C++,我正在设法将动态2d数组(指向指针的指针)作为输入参数传递给函数。我有一个动态的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:错误:从'int**‘到'const **’-fpermissive的转换无效 main.cpp:9:6: error:初始化'void (const**)‘-fpermissive的参数1
我试着使用ty胡枝子,它可以工作,但它不是常量。如果我喜欢的话:
typedef int** abc;
void func(const abc p);
main() {
abc p;
...
func(p);
}源编译,但函数'func‘能够修改"p矩阵“的值;我希望p是一个输入参数,它必须是只读的!
请,如何将指针到指针传递到将元素标记为只读的函数?
提前感谢您的帮助,并为我糟糕的英语表示歉意。
发布于 2015-12-13 20:38:43
您的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。
发布于 2015-12-13 20:31:29
void func(const int * const *p) {
}发布于 2015-12-13 20:27:21
试试这个:
typedef const int *cint_ptr_t ;
void func(const cint_ptr_t *p) {
}请记住,您希望控制2D数组的元素和指向每一行开头的指针。
https://stackoverflow.com/questions/34255850
复制相似问题