Yahoo奇摩知識+ 將於 2021 年 5 月 4 日 (美國東部時間) 終止服務。自 2021 年 4 月 20 日 (美國東部時間) 起,Yahoo奇摩知識+ 網站將會轉為唯讀模式。其他 Yahoo奇摩產品與服務或您的 Yahoo奇摩帳號都不會受影響。如需關於 Yahoo奇摩知識+ 停止服務以及下載您個人資料的資訊,請參閱說明網頁。

Neo 發問時間: 電腦與網際網路程式設計 · 2 0 年前

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 個解答

評分
  • SiYu
    Lv 5
    2 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這樣的錯誤

還有問題?馬上發問,尋求解答。