geweitt 2020-05-11 23:21 采纳率: 0%
浏览 196
已采纳

C语言中,栈的增长方向是向下增,但我测试结果是向上增。求解答!

为了测试栈的增长方向,测试源程序是

* #include<stdio.h>
* 
* int main(void)
* 
* {
* 
*     /*在栈上分配*/
* 
*     int i1=0;
* 
*     int i2=0;
* 
*     int i3=0;
* 
*     int i4=0;
* 
*     printf("栈:向下\n");
* 
*     printf("i1=%p\n",&i1);
* 
*     printf("i2=%p\n",&i2);
* 
*     printf("i3=%p\n",&i3);
* 
*     printf("i4=%p\n\n",&i4);
* 
*     return 0;
* 
* }

显示结果是

栈:向下

i1=0x7ffdc7b44f98

i2=0x7ffdc7b44f9c

i3=0x7ffdc7b44fa0

i4=0x7ffdc7b44fa4

从结果看,地址是变大的,说明是向上增长啊。

但是,书上都说,栈是向下增长的,地址是变小的。为啥我的不一样呢?

我用的是gcc version 7.5.0 (Ubuntu 7.5.0-3ubuntu1~18.04)。

  • 写回答

2条回答 默认 最新

  • threenewbee 2020-05-12 01:07
    关注

    一个函数内的变量,不能说明问题,因为编译器分配空间可以随意,得看2个函数调用,看下面的代码

    #include <stdio.h>
    
    void foo2();
    
    void foo1()
    {
        int i1=0;
        printf("foo1 i1=%p\n",&i1);
        foo2();
    }
    
    void foo2()
    {
        int i2=0;
        printf("foo2 i2=%p\n",&i2);
    }
    
    int main () {
        foo1();
        return 0;
    }
    

    foo1 i1=0x7fff2928c94c
    foo2 i2=0x7fff2928c92c

    说明向下

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥15 stable diffusion
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿