C ++ - значение указателя - PullRequest
0 голосов
/ 21 июля 2011

В книге Learning OpenCV:

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

Здесь мы видим, что *frame является указателем.Но когда мы пишем следующее frame = cvQueryFrame(capture);, мы не назначаем адрес указателю.Какие именно значения будут иметь frame в этом случае?

Спасибо.

Ответы [ 5 ]

2 голосов
/ 21 июля 2011

frame - указатель на объект типа IplImage. Предположительно, функция cvQueryFrame() выделяет объект IplImage и возвращает адрес этого объекта. Заявление

frame = cvQueryFrame(capture);

присваивает значение этого возвращаемого указателя frame. Если действительно функция выделяет новый объект, вам, вероятно, потребуется позже освободить эту память, вызвав operator delete или какую-нибудь функцию, например

void cvDestroyFrame( IplImage * );

Также утверждение, которое вы делаете в конце вашего вопроса («*frame - указатель») не является точным - frame - указатель; *frame означает, что вы отменяете ссылку на указатель, который делает его тип IplImage.

2 голосов
/ 21 июля 2011

На самом деле, *frame является разыменованным указателем, который даст объект, на который указывает указатель frame. В этом случае функция cvQueryFrame() возвращает указатель, присвоенный frame.

2 голосов
/ 21 июля 2011

Но, когда мы пишем следующий кадр = cvQueryFrame (capture); мы не назначаем адрес указателю.

На самом деле мы присваиваем обратитесь к указателю.cvQueryFrame возвращает значение указателя (адрес).

1 голос
/ 21 июля 2011

Функция cvQueryFrame возвращает указатель на IplImage, это означает, что ваш код назначает адрес указателю. Вот подпись функции:

IplImage* cvQueryFrame( CvCapture* capture );

Читайте об этом в руководстве:

1 голос
/ 21 июля 2011

Поскольку вы не предоставили прототип cvQueryFrame (я не знаком с этой библиотекой), я собираюсь предположить, что ее тип возвращаемого значения - IplImage *. Вероятно, этот метод выполняет выделение некоторой памяти внутри себя, а затем возвращает адрес из выделения. Итак, вы на самом деле, устанавливаете адрес.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...