1樓:池綠柳穆丙
樓上的說的很好,只是有點錯誤:
定義到main函式之外為全域性變數,並不是存放在堆區,而是放在全域性區。
一個由c/c++編譯的程式佔用的記憶體分為以下幾個部分
1、棧區(stack)—
由編譯器(compiler)自動分配釋放,存放函式的引數值,區域性變數的值等。其操作方式類似於資料結構中的棧。
2、堆區(heap)
—一般由程式設計師分配釋放,若程式設計師不釋放,程式結束時可能由os**。注意它與資料結構中的堆是兩回事,分配方式倒是類似於連結串列,呵呵。
3、全域性區(靜態區)(static)—,全域性變數和靜態變數的儲存是放在一塊的,初始化的全域性變數和靜態變數在一塊區域,
未初始化的全域性變數和未初始化的靜態變數在相鄰的另一塊區域。
-程式結束後有系統釋放
4、文字常量區
—常量字串就是放在這裡的。程式結束後由系統釋放
5、程式**區—
存放函式體的二進位制**。
定義到main函式之內為區域性變數,存放在棧區;定義到main函式之外為全域性變數,存放在全域性區。對於一個程式而言,棧區大小是由系統分配的,如果變數佔用空間過大則會出現棧溢位的問題。
2樓:蒲桂花賀賦
一個由c/c++編譯的程式佔用的記憶體分為以下幾個部分
1、棧區(stack)—
由編譯器(compiler)自動分配釋放,存放函式的引數值,區域性變數的值等。其操作方式類似於資料結構中的棧。
2、堆區(heap)
—一般由程式設計師分配釋放,若程式設計師不釋放,程式結束時可能由os**。注意它與資料結構中的堆是兩回事,分配方式倒是類似於連結串列,呵呵。
3、全域性區(靜態區)(static)—,全域性變數和靜態變數的儲存是放在一塊的,初始化的全域性變數和靜態變數在一塊區域,
未初始化的全域性變數和未初始化的靜態變數在相鄰的另一塊區域。
-程式結束後有系統釋放
4、文字常量區
—常量字串就是放在這裡的。程式結束後由系統釋放
5、程式**區—
存放函式體的二進位制**。
定義到main函式之內為區域性變數,存放在棧區;定義到main函式之外為全域性變數,存放在堆區,對於一個程式而言,棧區大小是由系統分配的,如果變數佔用空間過大則出現定義變數失敗,建議用堆區。
你可以將陣列大小改小一下放到main中試試,沒問題的。
3樓:
區域性變數會在執行時建立,而這個陣列太大了,已經超過了vc++的預設堆疊段的大小,所以會出現堆疊溢位的資訊。
而在函式外面定義的全域性變數是佔用程式檔案空間的,也就是說,在編譯連結時,全域性變數就已經在程式檔案中分配好了空間並完成了初始化。而程式檔案可以很大,所以不會出錯。
c語言字串陣列輸出字串個數問題
4樓:遷苢
char str=
「ahdhdhdhxjxjxhdgxvchfjjfxhxbbxxbxbcbbcbxbx\0」;
int i=0;
for(i=0;i<13143731168;i++)printf(「%d」,i)
或者char arr="ghhjkyfffghuihfffgg";
char *p=arr;
while(*p != '\0')
prntf(「%d」,p-arr);
這是全網最簡潔**了,通俗易懂。
給個贊?老鐵們。
5樓:董彩榮越未
strlen是遍歷每個字元,直到遇到末尾的結束符('\0')結束,所以能計數。
但month定義為字串陣列,本身是陣列,陣列沒有結束符,month[j++]是某一個字串,所以month[j++]!=0這句是沒有任何意義的。陣列的長度在執行時是未知的(c語言不會判斷陣列越界)。
這也就是大多數以陣列為引數的函式都還要另外提供一個長度引數len的原因。
6樓:阿四哥
c語言字串的學習,輸入指定字串,並且計算字串的位數
c語言字串陣列輸出字串個數問題
7樓:陽光的雷咩咩
strlen是遍歷每個字元,直到遇到末尾的結束符('\0')結束,所以能計數。
但month定義為字串陣列,本身是陣列,陣列沒有結束符,month[j++]是某一個字串,所以month[j++]!=0這句是沒有任何意義的。陣列的長度在執行時是未知的(c語言不會判斷陣列越界)。
這也就是大多數以陣列為引數的函式都還要另外提供一個長度引數len的原因。
C語言問題。定義二維陣列,C語言問題。定義一個二維陣列
ok洛陽水席 include int main sum 0 for i 0 i 5 i return 0 樓主基本沒有大錯誤,只是不夠仔細,用來儲存特定值的變數使用前一定要初始化,如本例中的最大值,最小值,下標,都是必須初始化的!整型與整型運算會得到整型,1 2 0,5 4 1 系統會捨去小數部分。...
c語言問題,一個c語言問題 !!
書寫要規範 include void main 第一和第二個for 迴圈對 a i j 賦值 即對a 1 1 a 1 2 一直到 a 5 5 第三和第四個for 列印二維陣列裡的內容 即你剛賦進去的值 這段 生成了一個6階的單位矩陣,並顯示出來。include 標頭檔案 void main 主函式 ...
c語言每輸出數換行,C語言,每輸出5個數換行
小夏在深圳 加一個計數的變數,每次找到目標時計數加一,被5整除時換行。源 如下 include int main 擴充套件資料1 printf 函式在碰到 n 時,並沒有直接輸出字元 與字元 n 而是將它們看作一個換行標記,執行了換行操作,以使後面的輸出列印在新的一行。2 printf函式的返回值是...