有時希望函數(shù)中的局部變量的值在函數(shù)調(diào)用結(jié)束后不消失而保留原值,這時就應(yīng)該指定局部變量為靜態(tài)局部變量,用關(guān)鍵字static進(jìn)行聲明。
通過用static類型聲明后的變量,其變量的內(nèi)存空間位于內(nèi)存的全局靜態(tài)區(qū),僅會初始化一次,這是一個非常重要的特性,請大家通過如下的程序理解:
#include<stdio.h> static a=5; int fun() { a=a*2; printf("a=%d\n",a); return 0; } int main() { int i=0; for(i=0;i<10;i++) { fun(); } return 0; }
請大家先自行理解,然后上機(jī)運(yùn)行如上代碼,可以觀察a的值輸出如下:
a=10 a=20 a=40 a=80 a=160 a=320 a=640 a=1280 a=2560 a=5120
這個結(jié)果的原因在于,每次a的值是接著上一次函數(shù)調(diào)用的值繼續(xù)運(yùn)算的,并非每次都初始化從5開始計(jì)算,這就是static的特性,請大家好好理解。
C語言網(wǎng)提供由在職研發(fā)工程師或ACM藍(lán)橋杯競賽優(yōu)秀選手錄制的視頻教程,并配有習(xí)題和答疑,點(diǎn)擊了解:
一點(diǎn)編程也不會寫的:零基礎(chǔ)C語言學(xué)練課程
解決困擾你多年的C語言疑難雜癥特性的C語言進(jìn)階課程
從零到寫出一個爬蟲的Python編程課程
只會語法寫不出代碼?手把手帶你寫100個編程真題的編程百練課程
信息學(xué)奧賽或C++選手的 必學(xué)C++課程
藍(lán)橋杯ACM、信息學(xué)奧賽的必學(xué)課程:算法競賽課入門課程
手把手講解近五年真題的藍(lán)橋杯輔導(dǎo)課程