亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C++數組放在main函數內外的區別

發布時間:2022-01-28 12:57:51 來源:億速云 閱讀:329 作者:柒染 欄目:開發技術

這篇文章將為大家詳細講解有關C++數組放在main函數內外的區別,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

先來看一道小題,第十屆藍橋杯省賽C++/B組填空題第三題

試題 C:數列求值

本題總分:10 分

【問題描述】

       給定數列 1, 1, 1, 3, 5, 9, 17, …,從第 4 項開始,每項都是前 3 項的和。求第 20190324 項的最后 4 位數字。

【答案提交】

       這是一道結果填空的題,你只需要算出結果后提交即可。本題的結果為一 個 4 位整數(提示:答案的千位不為 0),在提交答案時只填寫這個整數,填寫多余的內容將無法得分。

思路

顯然,這題目思路明確清晰,就是不斷計算然后對10000進行模運算得到最后4位整數

錯誤代碼

#include<iostream>
using namespace std;
const int MOD=10000;
int main(){
	int a[20190324]={0,1,1,1};//a[0]為0,使得下標與序號一致 
	for(int i=4;i<20190325;i++){
		a[i]=(a[i-3]+a[i-2]+a[i-1])%MOD;
	}
	cout<<a[20190324];
	return 0;

乍看完全沒啥問題吧,但運行結果卻是下面這樣

C++數組放在main函數內外的區別

 很懵,瘋狂debug后,發現原因竟然是:

大數組不能放在main函數里面,要定義在main函數外面成為全局變量!

正確代碼

#include<iostream>
using namespace std;
const int MOD=10000;
int a[20190324]={0,1,1,1};//a[0]為0,使得下標與序號一致
int main(){ 
	for(int i=4;i<20190325;i++){
		a[i]=(a[i-3]+a[i-2]+a[i-1])%MOD;
	}
	cout<<a[20190324];
	return 0;
}

C++數組放在main函數內外的區別

問題分析 

那為什么大數組一定要放在main函數外面而不能放在里面呢?

原因在于開設數組的區域不同,在運行代碼的時候,操作系統會分配不同的內存區域來運行代碼

棧區:由操作系統自動分配釋放,存放函數的參數值,局部變量的值,不需要時系統會自動清除,內存較小
堆區:由new分配的內存塊,也就是說在代碼中new一個數組,內存由堆區分配;堆區不由編譯器管,由應用程序控制,相當于程序員控制。如果程序員沒有釋放掉,程序結束后,操作系統會自動回收
數據區:也稱全局區或者靜態區,存放全局的東西,比如全局變量,內存較大
代碼區:存放執行代碼的地方

簡而言之,在main函數外面開設一個數組,它的內存分配在數據區里;而如果在main函數內部開設一個數組,它的內存分配在棧區內。一般來說棧區的內存是比較小的,所以平常開一些小一點的數組是完全沒問題的;但如果題目要求的數組比較大,那就會出現爆滿溢出的情況,程序將無法訪問內存而出錯;相反,數據區的內存較大,就不會出現這樣的問題。這就是為什么開設大數組一定要放在main函數之外的原因。

關于C++數組放在main函數內外的區別就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

孝昌县| 盐边县| 德钦县| 休宁县| 江安县| 宜黄县| 仲巴县| 阿巴嘎旗| 宣威市| 城市| 桦南县| 开封市| 新兴县| 陆川县| 洪雅县| 潼关县| 绥阳县| 乌兰察布市| 彭水| 贵德县| 科技| 大关县| 汶川县| 寿宁县| 乐亭县| 甘孜县| 余江县| 陵水| 华容县| 苏尼特左旗| 广宗县| 新龙县| 当阳市| 阿鲁科尔沁旗| 吉安市| 日喀则市| 巴彦县| 湘潭市| 陕西省| 闸北区| 永丰县|