zoukankan      html  css  js  c++  java
  • 关于vc变量定义顺序猜测

    没事上在网上看到网友提问指针加减的问题,看到个很有意思的现象——变量声明和地址的关系,大胆猜测一下,望指正。
    下面两个小程序的输出是什么?


    //code 1
    #include<stdio.h>
    void main()
    {
     int a=1,b=2,c=3;
     int *p=&a;
     *(p++);
     printf("a=%d,b=%d,c=%d
    ",*(p-1),*(p-2),*(p-3));
    }

    //code 2
    #include<stdio.h>
    void main()
    {
     int a=1;
     int b=2;
     int c=3;
     int *p=&a;
     printf("a=%d,b=%d,c=%d
    ",*(p++),*(p-1),*(p-2));
    }

    //code 3
    #include<stdio.h>
    void main()
    {
    	volatile int a=1;
    	volatile int b=2;
    	volatile int c=3;
    	volatile int *p=&a;
     printf("a=%d,b=%d,c=%d
    ",*(p++),*(p-1),*(p-2));
    }


    代码1的输出为a=1,b=2,c=3。。。查看三个变量地址:

    原来我们声明变量虽然是按照a,b,c 的顺序,但是编译器和我们理解的不同,反倒是c的内存地址在前。。。这样就好理解了。

    代码2是想尝试逐次定义的,但是结果竟然和代码1完全一样。忽然想起来有个编译器优化。

    代码3的结果和图片也相同。

    因此就猜测编译顺序和定义顺序不同造成的,希望知道答案的高手给个信。

  • 相关阅读:
    2019年春季第四周作业
    第三周作业
    第二周作业
    最大值及其下标
    查找整数
    PTA3
    币值转换
    三位老师
    自我介绍
    poj 3278 Catch That Cow(bfs)
  • 原文地址:https://www.cnblogs.com/sjw1357/p/3864021.html
Copyright © 2011-2022 走看看