首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >作为输入参数指向指针(2D数组)的指针

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

Stack Overflow用户
提问于 2015-12-13 20:17:41
回答 3查看 321关注 0票数 2

两个月前,我在大学开始学习C++,我正在设法将动态2d数组(指向指针的指针)作为输入参数传递给函数。我有一个动态的2d数组:

代码语言:javascript
复制
int **p;
p = new int*[R];
for(i=0; i<R; i++)
    p[i] = new int[C];

现在,我想使用const将这个指针p作为输入参数传递给一个函数。我的意思是,我希望函数不能修改矩阵的元素。

我试过这样做:

代码语言:javascript
复制
void func(const int **p) {
}

但我知道这个错误:

main.cpp:19:11:错误:从'int**‘到'const **’-fpermissive的转换无效 main.cpp:9:6: error:初始化'void (const**)‘-fpermissive的参数1

我试着使用ty胡枝子,它可以工作,但它不是常量。如果我喜欢的话:

代码语言:javascript
复制
typedef int** abc;

void func(const abc p);

main() {
abc p;
...
func(p);
}

源编译,但函数'func‘能够修改"p矩阵“的值;我希望p是一个输入参数,它必须是只读的!

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

提前感谢您的帮助,并为我糟糕的英语表示歉意。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-12-13 20:38:43

您的const int **p应该是const int * const *p。从const int **int **的转换不允许是隐式的,因为它可能违背所指向的值的一致性。要了解为什么,请看从C标准摘录的以下代码(第6.5.16.1节):

代码语言:javascript
复制
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

票数 3
EN

Stack Overflow用户

发布于 2015-12-13 20:31:29

代码语言:javascript
复制
void func(const int * const *p) {
}
票数 2
EN

Stack Overflow用户

发布于 2015-12-13 20:27:21

试试这个:

代码语言:javascript
复制
typedef const int *cint_ptr_t  ;

void func(const cint_ptr_t  *p) {
}

请记住,您希望控制2D数组的元素和指向每一行开头的指针。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34255850

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档