我有一个关于正确使用“&”的简单问题在变量之前。
printf( "34 * 7 = " );
scanf( "%d", &x );
printf( "The solution is 238 \n");
printf( "Your solution is %d \n\n", x );
我不明白为什么在阅读用户输入时必须使用“& x”以及为什么我在使用printf()函数时可以不使用。我想了解背后的原因。
答案 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"在阅读用户输入时
因为这是语言制定者选择定义它的方式。即使没有&
和printf
,scanf
运算符也能正常运行。
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被编码时要记住,参数将是一个地址,所以如果你传递的不是地址,那么一些代码显然会出错,从而导致错误