C++中指针里面的*怎么用

C++中指针里面的*怎么用,第1张

在声明语句中的“”是与前面的类型符号配合的,而不是与后面的变量名配合的,如int p;是声明了一个int 型指针变量p,而不是一个int型变量p;指针变量是p,所以后面赋值时不得再加""。

指针p并没有赋值,是野指针,不能作右值。

运算表达式中单独的“”基本就两种情况:一是在指针前,它是取指针所指对象的值;二是在两个变量间,它是乘号。p2 = p1 p2;的意思是p2 = (p1) (p2);,它就是把p1指向的变量的值即i的值乘以p2指向的变量的值即j的值,将其结果赋给p2指向的变量即j。所以这里p1、p2前面的“”是取值 *** 作符,显然和声明语句中的""不是一回事。

mat = new int [nMaxRow];在[nMaxRow]前的的意义已在第一问中回答了,它是与int配合使用的,意思是创建一个元素个数为nMaxRow的存放int 型指针的动态数组,将将第一个元素的地址赋给指针变量mat。

像素级别遍历是我们在图像任务中经常遇到的问题,在实时的图像处理中,能够高效的访问像素数据是很重要的。OpenCV中的数据容器是cv::Mat,cv::Mat提供了三种数据访问的方式分别是下标寻址,指针访问,迭代器访问。下面我们对比下这几种不同方式的访问速度。

对比这几种方式我们可以发现,最为高效的还是直接使用指针计算地址偏移量, 然而这种方式必须保证Mat在内存的存储是连续的,可以通过cv::Mat::isContinous()函数检测,如果是连续的则可以处理为单行向量,使用最为高效的方式访问。如果不想这么麻烦,其实method5是一种较为可取的方式,通过从cv::Mat::ptr()得到每一行的首地址,这样就不需要保证连续存储,速度和纯粹使用指针也差不了多少。

实际上对于method5,不使用中间指针进行改写的话:

重新测试下:

时间上已经十分接近method6,实际 *** 作的时候直接使用method5,不使用中间指针即可。

以上就是关于C++中指针里面的*怎么用全部的内容,包括:C++中指针里面的*怎么用、【OPENCV】cv::Mat像素遍历方法比较、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/10106688.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存