我在2个月前开始在大学学习C ++,我试图弄清楚如何将动态2d数组(指向指针)传递给函数作为输入参数。 我有这个动态的二维数组:
void func(const int **p) {
}
现在我想使用const将此指针p作为输入参数传递给函数。我的意思是我希望函数不能修改矩阵的元素。
我尝试过这样:
typedef int** abc;
void func(const abc p);
main() {
abc p;
...
func(p);
}
但是我收到了这个错误:
main.cpp:19:11:错误:来自' int **'的无效转换到#const; INT **' [-fpermissive]
main.cpp:9:6:错误:初始化' void func(const int **)'的参数1 [-fpermissive]
我尝试使用typedef并且它可以工作,但它并不是常数。 如果我喜欢这样:
z-index
源编译但功能' func'能够修改" p矩阵的值&#34 ;;我希望p是一个输入参数,它必须是只读的!
请问,如何将指向指针的指针传递给将元素标记为只读的函数?
提前感谢您的帮助,抱歉我的英语不好。
答案 0 :(得分:3)
您的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
。
答案 1 :(得分:2)
void func(const int * const *p) {
}
答案 2 :(得分:1)
试试这个:
typedef const int *cint_ptr_t ;
void func(const cint_ptr_t *p) {
}
请记住,您希望成为二维数组的元素和指向每行开头的指针