scanf函数输入时为什么要加&

对于scanf函数,它将参数视为一个地址,将键盘输入的字符传到这个地址中去,通常我们都是用的&地址的符号,事实上如果一个值恰好是一个地址的话,不加&也一样可以的:

如下例(测试环境为Win7 64位):

#include <stdio.h>

void main()

{

   int n = 0x18ff48;

   int m = 0x18ff44;

 

   //查看此时n,m的地址和值

printf("%x:%x\r\n",&n,n);

   printf("%x:%x\r\n",&m,m);

  

   scanf("%p",n);

   scanf("%p",m);

 

   //查看此时n,m的地址和值

   printf("%x:%x\r\n",&n,n);

   printf("%x:%x\r\n",&m,m);

 

   getchar();

}

这里我们将n,m的值设为一个地址格式的值,而且该地址还是空闲内存,在scanf输入的时候略去&,这时候scanf会将n,m的值作为一个地址,向该地址内写入数据而不是改变m和n的值。 

运行后结果如图:                     

 

scanf输入的值实际上是传给了地址18ff48和18ff44处,如果我们加上&,则改变的会是18ff44和18ff40处的值,这也就证明了scanf函数就是将参数视为一个地址,如果一个参数值恰好是个地址格式值,不用加&符号也可以赋值,只不过是将参数值作为地址而已。

转载于:https://www.cnblogs.com/wxl2578/p/3250212.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值