static變數C語言
『壹』 c語言中,static變數使用,如圖
因為C語言在函數調抄用時,採用「值傳遞」,就是形參被改變,不影響實參的值
簡單舉個例子
假如a=5;b=3;
Swap(int x,int y);交換兩個數,在主函數里調用
Swap(a,b);那麼a,b其實是不會被改變。。。
交換的只是x,y但是,x,y在函數調用結束,就釋放了。
同理,你的change(*pi)
調用change(p),那麼p的值是不會實際改變的。所以本來指向的4,調用結束,仍指向4,而不是指向10,並且+2
『貳』 c語言,靜態變數相關
被static定義的變數屬於靜態變數,之後即使再次定義都對其無效,所以它的值不會因為再次定義而重置值,所以再此題中就相當於就是在求1+2+3+4+5+6的和,故選B。
『叄』 C語言中static修飾變數
最主要有兩點用途。
讓一個變數長期有效,而不管其是在什麼地方被申明。比如:
int fun1()
{
static int s_value = 0;
....
}
那麼fun1不管在什麼地方被調用,當函數退出後,s_value最後的值將一直會被系統保存(相當於一個全局變數),下次s_value再被用到時,也即當fun1()再次被調用時,s_value初始值將是最近被保存過的值(請注意s_value初始化操作只會被執行一次,即上述s_value =0 這個語句)。
2.避免多個文件使用了相同的變數名而導致沖突
比如有多個文件,分別由幾個人獨立開發的。假定他們在各自的文件中定義相同的「全局」變數名(僅僅指在他們獨自的文件中全局),當系統集成時,由於他們使用了名字一樣的「全局」變數,導致有難於遇見的問題。解決這個問題方便的做法就是在各自文件中,在相同的全局變數申明前加上static修飾符。這樣系統就會為他們分配不同的內存,互不影響了。
『肆』 關於c語言static變數
函數中定義的static存儲型變數的地址被返回後,在主調函數中通過指針操作該變數是合法的,以下代碼可以驗證:
//#include"stdafx.h"//Ifthevc++6.0,withthisline.
#include"stdio.h"
int*f(void){
statica=1;
return&++a;
}
intmain(void){
int*p=f();
printf("%d ",*p);
*p=7;
printf("%d ",*p);
printf("%d ",*f());
return0;
}
輸出是:
2
7
8
說明很正常。
『伍』 c語言 static靜態變數
c語言的static變數是在來程源序載入的時候就為之分配內存的,一直到程序結束,而不像普通變數那樣函數執行一次分配一次。所以當第一次執行p(1)的時候,y已經加1了,下次執行p(2)時,y不會恢復成1,還是2;你就當全局變數的功能處理就行,性能上有區別
『陸』 c語言中static說明是什麼意思
static 用來說明靜態變數。
1、如果是在函數外面定義的,那麼其效果和全局變數類似,即static說明的變數可以在當前c程序文件中使用。
2、如果是在函數內部定義的,那麼這個變數只初始化一次,即使再次調用這個函數,這個static變數也不會再次被初始化,於是,這個變數的取值就會一直保存著,我們再次調用該函數時,仍是保存的上一次函數調用時保存的結果。
(6)static變數C語言擴展閱讀:
c語言中的static有三個主要作用:
1、隱藏性。當我們同時編譯多個文件時,所有未加static前綴的全局變數和函數都具有全局可見性。
2、static可以保持變數內容的持久,當static定義變數在函數內部時,改變數值的生命周期和全局變數相同。
3、static可以令其定義變數內存區所有位元組默認初始化為0,這一特點可以省去程序員許多麻煩,減少工作量。
『柒』 c語言中變數前的static有什麼用
static變數大概是兩種情況
在函數里的static變數意味著這個變數的生存期是全局的,你可以想像它實際上就是在函數外聲明的, 當然因為可見范圍的原因其他函數不能訪問它
在函數外的static變數意思是本地的, 跟不加static的差別就是其他文件不能通過extern來訪問這個變數。
『捌』 C語言static變數的一個問題
a = f(g(3));,其中g(3) = 2*3 = 6。f(6) = 2 + 6*6=38,並且f中的c變成38。
b = g(f(3));,其中,f中的c是static,保持上次計算後的值,38。所以f(3) = 38 + 3*3=47,g(3) = 2*47=94。
『玖』 C語言裡面靜態變數static是什麼作用啊
static關鍵字在C語言復中用於聲制明一個靜態的局部變數。
作用:
有時希望函數中的局部變數的值在函數調用結束後不消失而繼續保留原值,即其佔用的存儲單元不釋放,在下一次再調用該函數時,該變數已有值(就是上一次函數調用結束時的值)。這時就應該指定該局部變數為「靜態局部變數」,用關鍵字static進行聲明。
用靜態存儲要多佔內存(長期佔用不釋放,而不能像動態存儲那樣一個存儲單元可以先後為多個變數使用,節約內存),而且降低了程序的可讀性,因此若非必要,不要多用靜態局部變數。
『拾』 C語言中static變數的賦值問題
static int a = 0; // 運行期時初始化一次, 下次再調用時, 不進行初始化工作如下:
printf(「%d」,a);
a++;
}
int main()
{
staticLocalVar(); // 第一次調用, 輸出a=0
staticLocalVar(); // 第二次調用, 記憶了第一次退出時的值, 輸出a=1
return 0;
}
(10)static變數C語言擴展閱讀
1、static對全局變數的修飾,可以認為是限制了只能是本文件引用此變數。有的程序是由好多.c文件構成。彼此可以互相引用變數,但加入static修飾之後,只能被本文件中函數引用此變數。
2、static對棧變數的修飾,可以認為棧變數的生命周期延長到程序執行結束時。一般來說,棧變數的生命周期由OS管理,在退棧的過程中,棧變數的生命也就結束。
3、但加入static修飾之後,變數已經不再存儲在棧中,而是和全局變數一起存儲。同時,離開定義它的函數後不能使用,但如再次調用定義它的函數時,它又可繼續使用, 而且保存了前次被調用後留下的值。