我想接着讨論一下,如果是數組,那麼他與其它變量在棧上是如何配置設定存儲順序的。
我們已經知道,棧是從高位址到低位址生長,而數組是從低位址到高位址生長,那麼,這兩種不同的生長方式如何相容呢?于是我們設計如下程式。
#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個位元組。