问个基础问题:const CvMat* const * ppSrcImg

bsnry 2012-03-07 10:54:13
这是什么东西???

第一次见过


问题2:

const CvMat* pSrcImg[2]数组作为函数的参数, 会蜕化成什么??
...全文
134 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
qscool1987 2012-03-08
  • 打赏
  • 举报
回复
[Quote=引用楼主 bsnry 的回复:]
这是什么东西???

第一次见过


问题2:

const CvMat* pSrcImg[2]数组作为函数的参数, 会蜕化成什么??
[/Quote]
首先const CvMat* pSrcImg[2]会看做是const CvMat** pSrcImg;这个没问题吧
pSrcImg是一个数组,里面的元素是指针,指向CvMat类型
那继续看const修饰
比如这样的const CvMat* p;你明白它指向的内容不能改变
如果是这样const CvMat* const p;那么不仅指向的内容不能改变,而且他本身的值(也就是说p不能改变)
好了,在看const CvMat** pSrcImg;
它也只是一个指向CvMat*类型的指针罢了,前面加上const说明它指向的内容不能改变,那么它指向的内容是
CvMat*,也是一个指针,保存了一个地址,这个地址值是不能改变的,但是这个地址里面的值是可以改变的
但是如果改成:const CvMat* const* pSrcImg;那么一样来分析,前面一个const和上面一样解释,那中间这个你看是修饰 *,一级指针相当于const CvMat* p,这个时候就说明pSrcImg指向的指针再指向的内容不可以被修改
甚至还可能更复杂
const CvMat* const* cosnt pSrcImg;
不过一样分析
先把const全拿掉,那就是一个二级指针
然后把最左边这个加上去
变成const CvMat** pSrcImg;解释同上
然后把中间这个加上去,把左边这个拿掉
CvMat*const* pSrcImg;分析同上
再分析最后一个
CvMat** const pSrcImg;
修饰的是一个二级指针,不管它几级都是保存一个地址,说明它保存的地址不能被修改
--------------------------
像这种问题,*号多了你可能会觉得麻烦,但是你只要掌握一个规则就不会出错
你就看它右边的*号有几个,有几个*号就是修饰这个几级指针指向的内容罢了。如果没有就是修饰本身。
xiyoulaoyuanjia 2012-03-07
  • 打赏
  • 举报
回复
问题一:如下图

问题二
const CvMat**
bsnry 2012-03-07
  • 打赏
  • 举报
回复


3楼
gotojyh 2012-03-07
  • 打赏
  • 举报
回复
数组做参数变成指针
所以应该是 **

同意 pengzhixi
bsnry 2012-03-07
  • 打赏
  • 举报
回复
以前只见过: char const * p;

p是一个一级常量指针

把 char换成 const CvMat*


变成:const CvMat* const* p;

p指着一个常量指针。。。。。


一个指针能够指向一个指针,那么这个指针必须是二级指针啊。。。。

p是几级???? 变成了二级???





[Quote=引用 2 楼 pengzhixi 的回复:]

const CvMat* const * ppSrcImg;就是一个2级指针。

ppSrcImg指向的类型为const CvMat*const 也就是说ppSrcImg指向的元素类型本身是一个指针,而且该指针本身的指向不能被修改而且该指针指向的CvMat元素也不应该被修改。

const CvMat* pSrcImg[2]蜕化为const CvMat**
[/Quote]
pengzhixi 2012-03-07
  • 打赏
  • 举报
回复
const CvMat* const * ppSrcImg;就是一个2级指针。

ppSrcImg指向的类型为const CvMat*const 也就是说ppSrcImg指向的元素类型本身是一个指针,而且该指针本身的指向不能被修改而且该指针指向的CvMat元素也不应该被修改。

const CvMat* pSrcImg[2]蜕化为const CvMat**
bsnry 2012-03-07
  • 打赏
  • 举报
回复



高手呢, 坐等高手
bsnry 2012-03-07
  • 打赏
  • 举报
回复



3 楼

64,681

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧