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函数就是将参数视为一个地址,如果一个参数值恰好是个地址格式值,不用加&符号也可以赋值,只不过是将参数值作为地址而已。

posted @ 2013-08-10 16:06  熟如陌路  阅读(3536)  评论(0编辑  收藏  举报