【问题标题】:in C addresses do not work in functions , why is that?在 C 中的地址在函数中不起作用,这是为什么?
【发布时间】:2023-01-17 04:47:53
【问题描述】:

尝试在 C 中使用 C++ 样式时:

void square(int &x){
    x = x * x;
};

这会出错。 错误:在“&”标记之前需要“;”、“、”或“)”

我对 C++ 最满意,但我正在学习 C,有没有办法在 void 函数中获得地址

尝试从 void -> int、double、char 切换。它只有在我去掉 & 符号时才有效,但我想在那里有一个地址。有没有办法做到这一点? 我应该只使用 * 而不是 &,像这样:

void square(int *x){
    x = (*x) * (*x);
};

【问题讨论】:

  • 提示:int*int是两个非常不同的东西,这就是原因。
  • c++没有指针吗?
  • “我想在那里有一个地址” 第一个问题:为什么?如果你想要一个地址,你将不得不处理后果。
  • @Hackaholic C++ 有没有这个问题的参考。
  • void square(int &x)x 声明为参考,而这完全是 C++ 所没有而 C 所没有的东西。是的,在 C 中实现它的方法是使用指针 int *x 和显式取消引用 x = *x * *x(注意你不需要括号)。

标签: c function memory-address


【解决方案1】:

C 语言没有 C++ 参考。你需要使用指针

void square(int *x)
{
    *x = *x * *x;
}

您的第二个代码无效,因为您分配了一个整数转换为指针的本地指针。

【讨论】:

    【解决方案2】:

    即使在 C++ 中,符号 & 也不表示声明中的地址。它表示引用。

    C++ 中的这个声明

    void square(int &x){
    //...
    }
    

    意味着该函数通过引用接受其参数。

    在 C 中,按引用传递意味着通过指向对象的指针间接传递对象。因此,在函数中取消引用指针,您可以直接访问通过指针传递给函数的原始对象。

    所以 C++ 中的这个函数

    void square(int &x){
        x = x * x;
    }
    

    通过引用接受 int 类型的对象。

    在 C 中这个函数

    void square(int *x){
        *x = *x * *x;
    }
    

    通过指向它的指针间接地通过引用接受一个对象。

    【讨论】:

      猜你喜欢
      • 2014-08-24
      • 1970-01-01
      • 2020-04-02
      • 2022-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多