Yahoo奇摩知識+ 將於 2021 年 5 月 4 日 (美國東部時間) 終止服務。自 2021 年 4 月 20 日 (美國東部時間) 起,Yahoo奇摩知識+ 網站將會轉為唯讀模式。其他 Yahoo奇摩產品與服務或您的 Yahoo奇摩帳號都不會受影響。如需關於 Yahoo奇摩知識+ 停止服務以及下載您個人資料的資訊,請參閱說明網頁。
c 宣告a[6],可是使用a[7],a[8]都沒有問題?
如以下的程式碼,我只宣告到a[2],但存取a[6]都沒有問題?
VC 和Dev-C 都可正常編譯,和執行
#include <iostream>
using namespace std;
int main()
{
int a[2];
a[6]=0;
cout<<a[6]<<endl;
system("pause");
}
2 個解答
- SiYuLv 52 0 年前最佳解答
因為C/C++ 在run time,compiler time 跟本不會去check array 的邊界是否正確.
您那樣用不會出問題. 只是運氣好. 也許某天就會出問題.
給您一個會出問題的程式
用VC++6.0 compiler
輸出是
10
10
正確因該是
10
9
#include <iostream>
int main()
{
using namespace std;
int b=9;
int a[2];
a[2]=10;
cout << a[2] << endl;
cout << b << endl;
return 0;
}
參考資料: me - 匿名使用者2 0 年前
那只是每個編譯器的特質
如果是DOS Turbo C除了印出一堆亂碼, 嚴重的話還會當機
(編譯成EXE後, a[2]資料後,可能馬上擺的是程式機器碼了)
Windows下的編譯器, 可能比較不嚴謹, 不然就是用一個int(只要有任何變數宣告)
它至少就會空出一個64K資料段, 準備來放字串或數值資料
沒辦法Windows這時代的記憶比較多,而且也沒要求程式編起來要很小
但這樣程式,執行沒有錯誤, 但還是有array out of range這樣的錯誤