【发布时间】:2019-08-16 06:04:37
【问题描述】:
我正在阅读example of ffmpeg decoding,它具有传递给函数的指针地址:
static AVBufferRef *hw_device_ctx = NULL;
if ((err = av_hwdevice_ctx_create(&hw_device_ctx, type,
NULL, NULL, 0)) < 0) {
将指针的地址作为参数传递有什么意义?
我知道当我们传递指针本身时,如果指针的地址为0x123456,那么该函数将能够修改该地址中的对象是什么。但是当我传递一个指针的地址时,我传递的是这个指针号的分配地址?
如果我理解正确,我传递的是存储0x123456 的变量的地址?为什么函数需要它?
另外,假设我想像这样将hw_device_ctx 存储在unique_ptr 中:
std::unique_ptr<AVBufferRed> hw_pointer;
如何将其传递给av_hwdevice_ctx_create?因为我这样做时会出错
av_hwdevice_ctx_create(&hw_pointer.get(),...
上面写着:
expression must be an lvalue or a function designator
【问题讨论】:
-
阅读参数文档:ffmpeg.org/doxygen/3.2/…
-
还要注意,你需要调用一个特殊的函数来销毁它,所以你正常的 unique_ptr 将不起作用。
-
上下文创建函数希望在调用函数中分配一个指向
AVBufferRef *的指针,因此需要传递一个指向该指针的指针才能进行更改。跨度> -
@user202729 谢谢,我使用的是自定义删除器,只是示例中没有添加