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

  • 相关阅读:
    网络流初步——增广路算法(EK)模板
    求大组合数
    RMQ问题
    欧拉函数
    [LintCode] Minimum Path Sum
    [LintCode] Unique Paths II
    [LintCode] Unique Paths
    [LintCode] Flip Bits
    [LintCode] O(1) Check Power of 2
    [LintCode] Count 1 in Binary
  • 原文地址:https://www.cnblogs.com/mydomain/p/1791576.html
Copyright © 2020-2023  润新知