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