通过地址传递参数,为什么&(* v)无效?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通过地址传递参数,为什么&(* v)无效?相关的知识,希望对你有一定的参考价值。

我正在尝试使用C编程按地址传递函数自变量,以避免创建副本。

我正在这样做:

void change(int *v)

   (*v) =  (*v) + 1;

void value(int *v)

    printf("%i\n", *v);

    change(v);

    printf("%i\n", *v);

    change(&(*v));

    printf("%i\n", *v);


 int x = 89;
 value(&x);

输出为:

899091

有人可以向我解释为什么v&(* v)都可以作为改变的理由吗?

我原以为只有v是正确且有效的参数...

答案

如果*v合法,则&*v等效于v&*的倒数。

int *v = &x;

v;        // address of x
*v;       // x
&*v;      // address of x
另一答案

在您的代码中,当您将&x传递给函数value时,这就是您所得到的:

v=&x
*v = x 
&(*v)=&x

以上是关于通过地址传递参数,为什么&(* v)无效?的主要内容,如果未能解决你的问题,请参考以下文章

如何给url传递动态参数值?

什么是 Ruby Win32API 参数 |如何传递空指针?

有效/无效参数传递

Ajax中Put和Delete请求传递参数无效的解决方法(Restful风格)

从 rexx 代码向 ispf 宏传递参数时出现无效长度错误

在 v-bind:href 中传递参数