【发布时间】:2016-12-11 18:27:01
【问题描述】:
我正在学习如何在 Linux 中为 ALSA 编程,有一段代码是这样的:
snd_pcm_t * _soundDevice;
bool Init(const char *name)
{
int i;
int err;
snd_pcm_hw_params_t *hw_params;
if( name == NULL )
{
// Try to open the default device
err = snd_pcm_open( &_soundDevice, "plughw:0,0", SND_PCM_STREAM_PLAYBACK, 0 );
}
如您所见,它首先创建指向结构snd_pmc_t 的指针并将其命名为_soundDevice。然而,代码的其他部分只使用第一个指针:
if ((err = snd_pcm_hw_params_any (_soundDevice, hw_params)) < 0)
我知道指向结构的指针作为参数传递很有帮助,因为将整个结构作为副本传递会很糟糕,而且我也知道这个函数会修改指针指向的结构的内容,但是为什么有人需要一个指向结构指针的指针?
【问题讨论】:
-
这样你传递指针地址的函数,就可以设置指针了。
-
这看起来像 C 代码。为什么要包含c++ 标签?你真的在使用 C++ 吗?
-
当您传递非引用的参数时,它们会被复制。所以如果你传递一个 pointer 它将在函数中被复制。如果你改变它的值,你只会改变函数中 copy 的值,而不是你从外部传入的指针。你传入一个指向 outside 指针的指针,这样你就可以改变 outside 指针指向的位置(不仅仅是副本)。