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个字节。

  • 相关阅读:
    Linux查看物理CPU个数、核数、逻辑CPU个数
    【完结】利用 Composer 完善自己的 PHP 框架(三)——Redis 缓存
    端口被占用
    选择器
    Css四种样式
    PT与PX,em(%)区别
    tomcat报404
    webservice调用接口,接口返回数组类型
    音频与视频标签
    表单标签2
  • 原文地址:https://www.cnblogs.com/mydomain/p/1791576.html
Copyright © 2011-2022 走看看