課程
/后端開發(fā)
/C
/C語言入門
請問靜態(tài)存儲和動態(tài)存儲的區(qū)別是什么?最好舉個例子,謝謝。小編說的沒看懂。
2016-11-24
源自:C語言入門 5-11
正在回答
例如求從1開始每次計算乘2循環(huán)5次
void fn()
{
? ? static int x = 1; ? //定義靜態(tài)局部變量
? ? x*=2; ? ? ? ?//定義每次循環(huán)的計算式
? ? printf("x=%d\n",x); ?//顯示X的值
int main()
? ? int i;
? ? for(i=0;i<5;i++)
? ? {
? ? ? ? fn();
? ? }
? ? printf("x=%d\n",x);
? ? return 0;
}
/*這里用的是靜態(tài)存儲,所以我每一次循環(huán)輸出的值都會被記錄下來,x=2,x=4,x=8,x=16,x=32在程序調試界面就會看到 這幾個值 */
?同樣的例子用auto的話
? auto ? int x = 1; ? //定義 ? auto ?局部變 ? ?量
? ? ? ? fn(); ?
? ? } ??
用了auto的話計算的過程存儲的值就會得到釋放 則最后輸出結果 x=32
?可以大致理解兩者的區(qū)別就是靜態(tài)不會釋放循環(huán)過程中運算的值 會存起來與最后結果一并輸出,而自動的話就會把過程釋放掉僅留下最終結果
qq_二狗君_0 提問者
奧古斯都_剛鐸
上面回答在自動變量方面有些許錯誤
定義
在函數(shù)內部定義的常規(guī)變量稱為自動變量,使用自動存儲空間。
即這些變量在函數(shù)被調用時自動生成,在函數(shù)調用結束后自動消亡。
作用域
自動變量是一個局部變量,其作用域為包含它的代碼塊(指被花括號括起來的一段代碼)
#include?<stdio.h> void?fn() { auto?int?x?=?1;???//定義?auto?局部變量 ????x*=2;????????//?定義每次循環(huán)的計算式 ????printf("x=%d\n",x);??//?顯示X的值 } int?main() { ????int?i; ????for(i=0;i<5;i++) ????{ ????????fn();?? ????} ????return?0; }
輸出結果
x=2 x=2 x=2 x=2 x=2
在循環(huán)中調用fn函數(shù),每次調用,fn函數(shù)中的局部變量都是重新賦值的,由于結束函數(shù)調用,就自動消亡,所以是不會保存,每次都是同樣的輸出結果。
無切w
樓上的回答很全面!
如果用動態(tài)存儲的話,在程序調試界面就不會看到 ?x=2,x=4,x=8,x=16,x=32,只會看到最后輸出結果 x=32??
寶慕林8006028
舉報
C語言入門視頻教程,帶你進入編程世界的必修課-C語言
1 回答c語言動靜態(tài)存儲
2 回答定義靜態(tài)變量存儲的問題
2 回答變量儲存類別的區(qū)別
1 回答變量存儲類別
3 回答變量存儲類別
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網安備11010802030151號
購課補貼聯(lián)系客服咨詢優(yōu)惠詳情
慕課網APP您的移動學習伙伴
掃描二維碼關注慕課網微信公眾號
2016-11-25
例如求從1開始每次計算乘2循環(huán)5次
void fn()
{
? ? static int x = 1; ? //定義靜態(tài)局部變量
? ? x*=2; ? ? ? ?//定義每次循環(huán)的計算式
? ? printf("x=%d\n",x); ?//顯示X的值
int main()
{
? ? int i;
? ? for(i=0;i<5;i++)
? ? {
? ? ? ? fn();
? ? }
? ? printf("x=%d\n",x);
? ? return 0;
}
/*這里用的是靜態(tài)存儲,所以我每一次循環(huán)輸出的值都會被記錄下來,x=2,x=4,x=8,x=16,x=32在程序調試界面就會看到 這幾個值 */
?同樣的例子用auto的話
void fn()
{
? auto ? int x = 1; ? //定義 ? auto ?局部變 ? ?量
? ? x*=2; ? ? ? ?//定義每次循環(huán)的計算式
? ? printf("x=%d\n",x); ?//顯示X的值
int main()
{
? ? int i;
? ? for(i=0;i<5;i++)
? ? {
? ? ? ? fn(); ?
? ? } ??
? ? printf("x=%d\n",x);
? ? return 0;
}
用了auto的話計算的過程存儲的值就會得到釋放 則最后輸出結果 x=32
?可以大致理解兩者的區(qū)別就是靜態(tài)不會釋放循環(huán)過程中運算的值 會存起來與最后結果一并輸出,而自動的話就會把過程釋放掉僅留下最終結果
2016-12-17
上面回答在自動變量方面有些許錯誤
定義
在函數(shù)內部定義的常規(guī)變量稱為自動變量,使用自動存儲空間。
即這些變量在函數(shù)被調用時自動生成,在函數(shù)調用結束后自動消亡。
作用域
自動變量是一個局部變量,其作用域為包含它的代碼塊(指被花括號括起來的一段代碼)
輸出結果
在循環(huán)中調用fn函數(shù),每次調用,fn函數(shù)中的局部變量都是重新賦值的,由于結束函數(shù)調用,就自動消亡,所以是不會保存,每次都是同樣的輸出結果。
2016-11-25
樓上的回答很全面!
2016-11-25
如果用動態(tài)存儲的話,在程序調試界面就不會看到 ?x=2,x=4,x=8,x=16,x=32,只會看到最后輸出結果 x=32??