指向指针(2D数组)的指针作为输入参数

时间:2015-12-13 20:17:42

标签: c++ arrays pointers parameters const

我在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是一个输入参数,它必须是只读的!

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

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

3 个答案:

答案 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) {
}

请记住,您希望成为二维数组的元素指向每行开头的指针