1

下面这对语句有什么区别?

   int i;
   doSomethingWith(i);

   int i;
   doSomethingWith(&i);
4

3 回答 3

4

在 C 中,& 是地址运算符。因此,不是i像在第一次调用中那样传递 的副本,而是传递i或的地址&i,这意味着函数可以直接修改它。

该函数将如下所示:

void doSomethingWith (int *var);

这意味着它需要一个指向整数(在本例中为 )的指针(保存地址的东西i)。然后,i直接修改,函数可以:

*var = 5;

这是解引用运算符,它为您提供实际存储在该地址的内容。此调用将 5 分配给存储在您使用 &i 传递的内存位置的内容。

任何 C 教科书在谈到指针时都应该详细解释这一点。

于 2012-04-15T19:53:02.217 回答
2

首先,您传递了 i 的值。在第二个中,您将在内存中传递变量 i 的地址。

看看这个关于指针和类似东西的视频。

于 2012-04-15T19:50:44.203 回答
0
  • 传递 'i' --> 传递 i 的值(内存位置内的值)
  • 传递 '&i' --> 传递对 'i' 的内存位置的引用
于 2012-04-15T19:58:42.170 回答