zoukankan      html  css  js  c++  java
  • scanf函数输入时为什么要加&

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

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

    #include <stdio.h>

    void main()

    {

       int n = 0x18ff48;

       int m = 0x18ff44;

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

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

       printf("%x:%x ",&m,m);

      

       scanf("%p",n);

       scanf("%p",m);

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

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

       printf("%x:%x ",&m,m);

       getchar();

    }

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

    运行后结果如图:                     

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

  • 相关阅读:
    hadoop 异常及处理总结-02(小马哥精品)
    Linux环境变量(小马哥推荐)
    Apache Tomcat 8.5 安全配置与高并发优化
    深入理解分布式系统中的缓存架构(上)
    Redis的n种妙用,不仅仅是缓存
    springBoot整合ecache缓存
    Spark Streaming实时处理应用
    Spark 实践
    spark性能调优
    Spark调优
  • 原文地址:https://www.cnblogs.com/wxl2578/p/3250212.html
Copyright © 2011-2022 走看看