C++ - pointer value

C++ - pointer value

本文关键字:value pointer C++      更新时间:2023-10-16

Learning OpenCV书中:

.
.
CvCapture *capture = cvCreateFileCapture(argv[1]);
IplImage* frame;
while(1)
{
frame = cvQueryFrame(capture);
.
.
}

在这里,我们可以看到*frame是一个指针。但是,当我们编写下面的frame = cvQueryFrame(capture);时,我们并没有为指针分配地址。在这种情况下,frame将保持的值究竟是多少?

谢谢。

frame是指向IplImage类型对象的指针。假定cvQueryFrame()函数分配一个IplImage对象并返回该对象的地址。声明

frame = cvQueryFrame(capture);

将该返回指针的值分配给CCD_ 9。如果函数确实在分配一个新对象,您可能需要稍后通过调用operator delete或之类的函数来释放内存

void cvDestroyFrame( IplImage * );

此外,你在问题末尾的陈述("*frame是指针"(也不准确——frame是指针;*frame表示您正在取消引用使其类型为IplImage的指针。

但是,当我们编写下面的frame=cvQueryFrame(capture(;时;,我们没有为指针分配地址。

实际上,我们正在为指针分配地址。cvQueryFrame返回指针值(地址(。

实际上,*frame是一个取消引用的指针,它将给出指针frame所指向的对象。在这种情况下,函数cvQueryFrame()返回被分配给frame的指针。

由于您没有提供cvQueryFrame的原型(我不熟悉这个库(,我假设它的返回类型是IplImage*。这个方法可能在自己内部分配一些内存,然后从分配中返回地址。所以你在现实中,正在设置一个地址。

函数cvQueryFrame返回一个指向IplImage的指针,这意味着您的代码确实为指针分配了一个地址。这是函数的签名:
IplImage* cvQueryFrame( CvCapture* capture );

阅读手册:

  • HighGUI参考手册