繁体   English   中英

为什么在扫描C中的输入时需要(&)的地址位置

[英]Why do we need the address location of (&) when scaning input in C

我只是浏览一些C注释,我想知道您是否要这样做:

int var1 = 0;
scanf("%d", var1);

您会遇到某种问题。 就像您使用操作的地址位置来编写它一样:

int var1 = 0;
scanf("%d", &var1);

它工作得很好。

我一直给人的印象是,只使用变量名来存储值...为什么要指定地址lcoation?

scanf函数需要知道var1在内存中的存储位置才能对其进行修改。 如果仅将var1传递给scanf ,则仅将var1值压入堆栈。 你需要传递&var1 ,这样的地址 var1被压入堆栈。 完成此操作后, scanf可以取消引用指针以修改调用函数中的变量。

因为C按值复制参数。 考虑以下(无用)功能:

void set_one(int x)
{
    x = 1;
}

当您称呼为

int i = 2;
set_one(i);

那和

set_one(2);

该函数获取2的副本,将其称为x ,然后将其覆盖为1并返回。 原来的2 ,也就是i ,没有改变。

要使此功能在远程使用,必须告诉它将结果放在何处 ,而不要结果位置中显示当前

void set_one(int *p)
{
    *p = 1;
}

现在,调用set_one(&i)告诉函数将结果存储在变量名i指定的位置,结果该结果将被覆盖。

为什么要指定地址标记?

因为编译器不知道将值存储在哪里,这就是为什么它需要变量的地址来存储值而不是变量的原因。

因为传入C的默认参数是按值传递参数。 当您指定地址时,该地址所指向的内容将被该函数修改,并且在调用函数中可见。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM