读书人

一个关于const修饰符的有关问题

发布时间: 2012-04-20 15:27:03 作者: rapoo

一个关于const修饰符的问题
碰到一个关于const修饰符的问题:
平时将一个指针传给一个函数时,会加const修饰以避免其内容被改变。
如将CvMat* pSrcImg传给一个形参为const CvMat* pSrcImg的函数,程序没问题。
现在如果要传的是一个指针数组,就出问题了,我想让指针数组里的指针指向的内容不会被修改,
也就是将CvMat* pSrcImg[2]传给一个形参为const CvMat* pSrcImg[]的函数,但是编译出错。
应该怎么修改?

[解决办法]

探讨

不要纠结各种常量了,这个世界上唯一不变的就是变化。用API WriteProcessMemory还能修改正运行的其它进程的内存里面的所谓常量呢!

[解决办法]
CvMat* pSrcImg[2]数组穿进去会弱化为 CvMat**这样的指针,如果想不出错那么函数的参数类型声明为 const CvMat* const*即可

[解决办法]
数组与指针很有一腿的
你这个指针数组,在参数传递时,类似于指针的指针传递了,关于指针的指针传递,值就会变了哦
[解决办法]
将 const CvMat* pSrcImg[] 改为 const CvMat* const * ppSrcImg
[解决办法]
看错问题了...

const CvMat* pSrcImg[] 也就是 const CvMat **pSrcImg 相当于 CvMat const **pSrcImg,const的是CvMat

你需要的是 CvMat * const *pSrcImg,这样const的才是CvMat *
[解决办法]
C/C++ code
typedef struct{} CvMat;void test(CvMat* const pSrcImg[]){    //*pSrcImg = (CvMat*)2;  ---> 尝试修改值将会引发编译期报错}int main(void){    CvMat* pSrcImg[3] = { (CvMat*)0 };    test(&pSrcImg[2]);    return 0;} 

读书人网 >C语言

热点推荐