Mat& image = *(Mat*)param; 这句话解析

Mat& image = (Mat)param;
跟Mat &image = (Mat)param;
两句有区别吗?这行代码是什么意思,搞晕了。。。。

求详解,求详解,求详解。。。。最好能举个例子就好了,谢谢大神。

没区别,都是取引用,就是image和param指的是同一个变量,只不过你可以用image调用也可以用param调用。
函数传参传引用也是设个道理,void func( int& t ),这样写你就可以在函数中直接用t调用外部参数(外部可能是另一个名字),而不是通过拷贝调用副本。

(Mat)param分为两部分,
第一部分是右边的(Mat*)param, 将param强转为Mat型的指针
左边的第一个*就是对这个Mat型的指针取内容,获得一个Mat类型的临时变量

再看=号左边的Mat& image
image是一个Mat型的引用,它引用的就是右边一个Mat类型的临时变量
所以image是右边的临时变量的别名,它们具有相同的内存地址
即对imge取地址(&image) == param(右边的临时变量的地址)

分析一下:Mat& image = (Mat)param; 中param传过来的应该是一个地址,Mat*是将param转成mat的地址,而第一个*是取值运算符就是将前面你转的地址里的值取出,赋给image,Mat&image是引用类型,所以这里的image就是param这个地址指向的内容,若没有&的话,image赋值时会重新复制一份,而这时的image是新的不是param里的,虽然两者内容一样,但地址不同,这种情况你函数定义应该是类似test(lpvoid param)
2.Mat& image = (Mat)param;,这个是将param直接转成Mat的引用,这个param正常应该就是一个Mat对象,这时你函数定义应该是test(Mat&param)
如果你的param是指针的话,你将param转成Mat编译都不会过

 两行代码唯一的差别在于Mat& image中空格位置的不同。然而就c++语法来说,这里不需要界符。
Mat&image、Mat[任意个空格]&image、Mat&[任意个空格]image、Mat[任意个空格]&[任意个空格]image在编译器看来都是一样的,这些空格在词法分析之后都被忽略了。
 类似地,我想你不会问
int i =1;



//若干空行
int j = 2;
和
int i = 1;
int j = 2;
有什么区别吧


没有区别,

Mat& image = (Mat)param; 相当于 Mat* p = (Mat*)param; Mat& image = *p;

Mat& image = (Mat)param 后边只是把param的类型强制转换了一下