gpt4 book ai didi

c - 论点中的指针,&符号?

转载 作者:太空宇宙 更新时间:2023-11-04 00:43:07 24 4
gpt4 key购买 nike

我将一个指针传递给一个函数,我可以从该指针访问结构的成员。

在这个函数中,我需要用相同的指针作为参数调用另一个函数。我使用了符号,但应用程序已停止。

如何从 myfunction() 调用 anotherfunction() ?

bool anotherfunction( const ovrVkGraphicsPipelineParms * parms )
{
myStruct info;
info.layout = parms->program->parmLayout.pipelineLayout; // application error
}

bool myfunction( const ovrVkGraphicsPipelineParms * parms )
{
myStruct info;
info.layout = parms->program->parmLayout.pipelineLayout; // Works

anotherfunction( &parms ); // compile, but application stopped
}

void main()
{
myfunction( &pipelineParms );
}

最佳答案

在 C 中,&变量前的字符并不意味着“这个东西是一个指针”。不,当你输入 &在变量之前,它的意思是“让我指向这个”。

所以当你打电话

myfunction(&pipelineParms);

你有一个变量 pipelineParms , 你创建了一个指向它的指针,它就是你传递给 myfunction 的指针.

然后,在myfunction , parms是一个指针(具体来说,是指向类型 ovrVkGraphicsPipelineParms 的指针。希望 pipelineParms 中的 main 也是类型 ovrVkGraphicsPipelineParms。)

所以在myfunction , 如果你想将指针传递给 anotherfunction , 只需传递它:

anotherfunction(parms);

我们可以看到 anotherfunction还接受指向类型 ovrVkGraphicsPipelineParms 的指针, 所以这是正确的。

当您尝试调用 anotherfunction(&parms) 时, &说,“让我指向这个”。所以你得到了一个指向 类型 ovrVkGraphicsPipelineParms 的指针, 或 ovrVkGraphicsPipelineParms ** .如果是这样的话可能没问题anotherfunction期望,但事实并非如此。

并不是说 C 有常规变量,也不是指向常规变量的指针。你可以有指向任何东西的指针。你可以有指针指向指针,指针指向指针指向指针,理论上你也可以有 4 级、5 级和 6 级指针,一直到 12 级或更多(尽管实际上超过 3 级的指针是非常罕见的).

还有一件事:你说

anotherfunction( &parms ); // compile, but application stopped

但我猜它实际上没有正确编译。我猜你的编译器给了你一个警告。我的说:

warning: incompatible pointer types passing 'const ovrVkGraphicsPipelineParms **' to parameter of type 'const ovrVkGraphicsPipelineParms *'; remove &

如果您的编译器没有在该行给您警告,我鼓励您尽可能切换到更好的编译器。 (现代编译器也会就 void main 向您发出警告,这也是错误的,尽管它不会给您带来任何问题。)

关于c - 论点中的指针,&符号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58392999/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com