zoukankan      html  css  js  c++  java
  • 5、对变量在栈上存储顺序,及函数返回值与参数在栈上存放顺序的思考(3)

    我想接着讨论一下,如果是数组,那么他与其它变量在栈上是如何分配存储顺序的。

    我们已经知道,栈是从高地址到低地址生长,而数组是从低地址到高地址生长,那么,这两种不同的生长方式如何相容呢?于是我们设计如下程序。

    #include "iostream"

    using namespace std;

    int main()

    {

    char ch1 = 'a';

    char arr[5];

    char ch2 = 'b';

    cin >> arr;

    printf("%p\n",&ch1);

    printf("%p\n",&ch2);

    printf("%p\n",arr);

    printf("%p\n",arr+1);

    cout << ch1 <<endl

         << ch2 <<endl

      << arr <<endl;

    }

    其在GCC下执行结果如下所示:

    可见,栈是从高地址到低地址生长,而数组是从低地址到高地址生长这个结论不错,但是,我们虽然申请了5个字符数组,可编译器却总共空出了31个字节来。所以,我在想,那么如果我输入了31个以上的字符给arr,那不就溢出了吗?

    于是试验了一个,果然是这个样子的。

    VS上,我的机器上测试的给数组留出的空间是20个字节。

  • 相关阅读:
    SSH框架搭建全过程详解
    SpringMVC项目配置全过程详解
    <抽奖奇遇>
    extJS--尚
    CentOS 7.3安装指南
    javaWeb项目之图书管理系统(附视频讲解)
    Swing记事本项目
    五、PTA实验作业(结构体)
    四、PTA实验作业(指针)
    三、PTA实验作业(数组)
  • 原文地址:https://www.cnblogs.com/mydomain/p/1791576.html
Copyright © 2011-2022 走看看