none
多个变量被声明时,它们在内存中是不是连续的 RRS feed

  • 问题

  • #include<stdio.h>
    int main()
    {
     char a,b,c,*p,*q,*r;
     printf("%d %d %d %d %d %d\n",&a,&b,&c,&p,&q,&r);
     return 0;
    }
    用它来打印出编译器分配给这些变量的地址。
    结果是 1245027 1245015 1245003 1244988 1244976 1244964
    用十进制的格式打印出来为什么会差12?还有为什么会是递减的?
    2009年5月1日 4:24

答案

  • 不是的,只有结构和数组里的数据地址是连续的.
    局部变量是在程序的栈里分配的.
    Hello world
    • 已标记为答案 赵博 2009年5月1日 9:23
    2009年5月1日 6:44
    版主

全部回复

  • 不是的,只有结构和数组里的数据地址是连续的.
    局部变量是在程序的栈里分配的.
    Hello world
    • 已标记为答案 赵博 2009年5月1日 9:23
    2009年5月1日 6:44
    版主
  • C++标准里面也没有对结构和数组里的数据地址的连续性作出保证。

    MSMVP VC++
    2009年5月4日 22:20
    版主
  • 不要期待数据在内存中是连续的,根据所在操作系统还有内存对齐等限制,数据在内存不一定是连续的。还有正向Vonger所说,自动变量会被创建到栈上,栈和堆的区别是,栈是由堆栈段的高地址开始向下增长的,而堆是有低地址向上增长。
    2009年5月5日 1:09
    版主