【问题标题】:what is the use of [ampersn] in scanf() in c language [duplicate]c语言scanf()中的[ampersn]有什么用[重复]
【发布时间】:2018-07-17 10:34:32
【问题描述】:

为什么我们在存储价值时使用& (ampersn) 登录scanf()

PS : 我知道它是用来将变量的值存储在正确的地址。

还有其他正当理由吗?

【问题讨论】:

  • 你为什么认为给定的原因是不正确的
  • @SouravGhosh 因为查看下面的答案,这是引用和取消引用部分在上述原因中不清楚的正确原因。
  • 什么都不清楚,只是一个建议:开始阅读一些好书。
  • 下次提问时,请使用您在 Google 中标题中的关键字和 site:stackoverflow.com,以查找 Stack Overflow 上存在的具有出色答案的先前问题。如果你能证明你已经完成了你的研究,你的问题就会得到更积极的回答。

标签: c


【解决方案1】:

在 C 中,您只能按值传递参数。这意味着当您将参数传递给函数时,该值会复制

C 没有按引用传递,但可以使用指针来模拟。

例如

#include <stdio.h>

void f1(int a)
{
    a = 123;  // Modify local copy
}

void f2(int *a)
{
    *a = 234;  // Modify value where a is pointing
}

int main(void)
{
    int a1 = 0, a2 = 0;

    f1(a1);
    f2(&a2);

    printf("a1 = %d, a2 = %d\n", a1, a2);
}

上面的程序会打印

a1 = 0, a2 = 234

这是因为当f1 修改其参数的值时,它只修改了它的本地副本。原(main函数中的变量a1)没有修改。

另一方面,函数f2 模拟通过引用传递。当调用f2 时,我们使用地址运算符&amp; 传递一个指向变量a2 的指针。然后该函数可以取消引用该指针以获取它指向的位置(main 函数中的变量a2)并对其进行修改。

因为scanf函数需要修改变量,所以不能传递它们当前值的副本,需要像上例中调用f2时一样传递指向变量的指针。

【讨论】:

    【解决方案2】:

    c所有函数参数都是按值传递的。

    这意味着一个函数不能修改调用者传递的参数。

    除了使用return之外,它可以做的是接受指针类型(指向数组或对象)作为参数,并修改这些数组或解除引用这些指针。

    这是scanf 使用的方法。 scanf 也使用了return

    【讨论】:

      猜你喜欢
      • 2013-12-12
      • 1970-01-01
      • 2015-06-26
      • 2019-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多