[英]The usage of “&” working with printf() and scanf()
关于在变量之前正确使用“&”,我有一个简单的问题。
printf( "34 * 7 = " );
scanf( "%d", &x );
printf( "The solution is 238 \n");
printf( "Your solution is %d \n\n", x );
我不明白为什么在阅读用户输入时必须使用“&x”以及为什么在使用printf()函数时我可以不使用。 我想了解背后的原因。
In C, C++, and Go, a prefix "&" is a unary operator denoting the address in memory of the argument, eg &x, &func, &a[3].
我不明白为什么在阅读用户输入时必须使用“&x”
因为这是语言制定者选择定义它的方式。 即使没有printf
和scanf
, &
运算符也能正常工作。
int *pointer_to_x = &x;
现在这个scanf( "%d", pointer_to_x );
与scanf( "%d", &x );
相同scanf( "%d", &x );
scanf函数将一个指向int的指针作为参数,在这种情况下,printf只接受int。 &是运营商的地址。
在printf()函数中,您不会更改变量' x '的值,而在scanf()函数中您必须更改' x '的值。 “&X”给出x的地址,这被传递给函数scanf()的 ,以及从用户所采取的值使用x的地址存储在X,最后当我们从功能scanf()的x的值被存储回与用户给出的值。 如果我们不使用'&x',那么scanf()函数将获得变量' x '的本地副本,并且当我们从函数返回时,不会反映更改。
在参数中总是通过值调用方法传递。 因此无论您传递什么参数,副本都会被创建并存储在函数中。
但是使用指针,我们可以使函数“看起来像”通过函数调用的引用类型实现调用!
例如:
int fun(int *p)
{
p=1;
return p;
}
现在举一个函数调用fun(&x);
的例子fun(&x);
,此函数现在将x
的值更改为1。
因此,在scanf()
情况下,应该在函数调用中发生赋值,并且只能通过知道变量的地址(因为名称具有范围)来为函数范围外的变量赋值。
因此,由于这样的原因, scanf()
函数被编码,记住参数将是一个地址,所以如果你传递除地址以外的任何东西,一些代码显然会出错,从而导致错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.