下面这对语句有什么区别?
int i;
doSomethingWith(i);
和
int i;
doSomethingWith(&i);
在 C 中,& 是地址运算符。因此,不是i
像在第一次调用中那样传递 的副本,而是传递i
或的地址&i
,这意味着函数可以直接修改它。
该函数将如下所示:
void doSomethingWith (int *var);
这意味着它需要一个指向整数(在本例中为 )的指针(保存地址的东西i
)。然后,i
直接修改,函数可以:
*var = 5;
这是解引用运算符,它为您提供实际存储在该地址的内容。此调用将 5 分配给存储在您使用 &i 传递的内存位置的内容。
任何 C 教科书在谈到指针时都应该详细解释这一点。
首先,您传递了 i 的值。在第二个中,您将在内存中传递变量 i 的地址。
看看这个关于指针和类似东西的视频。