c語言陣列放在main函式裡面和外面的區別

2021-09-19 08:34:29 字數 711 閱讀 2323

最近a演算法題的時候碰到一道題:乙個數列前三項都為1,之後每項的值等於前三項之和,求第20193024項的最後4位數字。一開始寫的**如下:

結果一直爆 terminated due to signal: segmentation fault (11) 這個錯誤,改了好久沒改出來。之後在stackoverflow上提問才找到自己錯誤所在。

這裡先介紹一下棧區(stack),堆區(heap),資料區(data seg)和**區。

棧區:由作業系統自動分配釋放,存放函式的引數值,區域性變數的值;當不需要時系統會自動清除。

堆區:由new分配的記憶體塊,不由編譯器管,由應用程式控制(相當於程式設計師控制)。如果程式設計師沒有釋放掉,程式結束後,作業系統會自動**。

資料區:也稱全域性區或者靜態區,存放全域性的東西類似全域性變數。

**區:存放執行**的地方,類似if else,while,for這種語句。

原來在main函式裡面的陣列是開在棧區(stack),在函式外面的是開在資料區的。棧區的記憶體比較小,所以當陣列非常大的時候,就會報錯。假如把陣列放在資料區就不會出現這個問題,因為資料區的記憶體很大。

修改後的**如下:

C語言main函式

c語言中main函式是可以帶引數的,平時寫倒是沒怎麼用這個引數,學習了一下這個引數。c語言規定了main函式只能有兩個引數,並且其型別也規定了,習慣上把他們寫成 main int argc char argv 第乙個引數是整形,第二個引數是指向字串的指標陣列,為什麼這麼定義?有什麼用?c語言還規定了...

VC裡面的main 函式

通過main 函式的引數給程式增加一些處理資訊,可以使程式和使用者實現更多互動式的通訊.如果你的程式需要命令列引數編譯的話,那麼源程式的主函式main 就需要帶引數 也就是所謂的命令列引數。帶有引數的main 函式頭格式為 void main int argc,char argv 或void mai...

C語言main 函式詳解

c的設計原則是把函式作為程式的構成模組。main 函式稱之為主函式,乙個c程式總是從main 函式開始執行的。在最新的 c99 標準中,只有以下兩種定義方式是正確的 int main void 無引數形式 int main int argc,char argv 帶引數形式 int指明了main 函式...