使用“&”使用printf()和scanf()

时间:2014-03-25 06:32:31

标签: c

我有一个关于正确使用“&”的简单问题在变量之前。

printf( "34 * 7 =  " );
scanf( "%d", &x );
printf( "The solution is 238 \n");
printf( "Your solution is %d \n\n", x );

我不明白为什么在阅读用户输入时必须使用“& x”以及为什么我在使用printf()函数时可以不使用。我想了解背后的原因。

4 个答案:

答案 0 :(得分:1)

In C, C++, and Go, a prefix "&" is a unary operator denoting the address in memory of the argument, e.g. &x, &func, &a[3].

  

我不明白为什么我必须使用"& x"在阅读用户输入时

因为这是语言制定者选择定义它的方式。即使没有&printfscanf运算符也能正常运行。

int *pointer_to_x = &x;

现在这个scanf( "%d", pointer_to_x );scanf( "%d", &x );

相同

答案 1 :(得分:1)

scanf函数将指向int的指针作为参数,在这种情况下,printf只接受int。 &是运营商的地址。

答案 2 :(得分:1)

printf()函数中,您不会更改变量' x '的值,而在 scanf()功能你必须改变' x '的值。 ' &安培; X '给出 x 的地址,将其传递给函数 scanf(),并使用该地址将用户的值存储在 x 中当我们从函数scanf()返回时,x的值与用户给出的值一起存储。如果我们不使用'& x',那么 scanf()函数将获得变量的本地副本' x &#39 ;当我们从函数返回时,不会反映更改。

答案 3 :(得分:0)

参数总是通过值方法调用传递。因此无论您传递什么参数,副本都会被创建并存储在函数中。

但是使用指针,我们可以通过函数调用的引用类型实现一个函数'看起来像'!

例如:

int fun(int *p)
  {
    p=1;
    return p;
  }

现在举一个函数调用fun(&x);的示例,此函数现在将x的值更改为1.

因此,在scanf()的情况下,应该在函数调用中发生赋值,并且只能通过知道变量的地址(作为名称)来为函数范围外的变量赋值。有范围)。

因此,scanf() funciton被编码时要记住,参数将是一个地址,所以如果你传递的不是地址,那么一些代码显然会出错,从而导致错误