1. 程式人生 > >C語言 static變數 函式

C語言 static變數 函式

static 變數

#include "iostream.h"

int p(int x)
{
static int y=1;
y=y+1;
return (x+y);}
int main()
{
cout<<p(1)<<endl;
cout<<p(2)<<endl;}

答案是3和5,為什麼不是3和4呢?

c語言的static變數是在程式載入的時候就為之分配記憶體的,一直到程式結束,而不像普通變數那樣函式執行一次分配一次。所以當第一次執行p(1)的時候,y已經加1了,下次執行p(2)時,y不會恢復成1,還是2;你就當全域性變數的功能處理就行,效能上有區別
分配記憶體的,一直到程式結束,而不像普通變數那樣函式執行一次分配一次。所以當第一次執行p(1)的時候,y已經加1了,下次執行p(2)時,y不會恢復成1,還是2;你就當全域性變數的功能處理就行,效能上有區別

static函式

用static修飾的函式,本限定在本原始碼檔案中,不能被本原始碼檔案以外的程式碼檔案呼叫。而普通的函式,預設是extern的,也就是說,可以被其它程式碼檔案呼叫該函式。
  在函式的返回型別前加上關鍵字static,函式就被定義成為靜態函式。普通 函式的定義和宣告預設情況下是extern的,但靜態函式只是在宣告他的檔案當中可見,不能被其他檔案所用。因此定義靜態函式有以下好處:
  <1> 其他檔案中可以定義相同名字的函式,不會發生衝突。
  <2> 靜態函式不能被其他檔案所用。
  在函式的返回型別前加上關鍵字static,函式就被定義成為靜態函式。普通 函式的定義和宣告預設情況下是extern的,但靜態函式只是在宣告他的檔案當中可見,不能被其他檔案所用。因此定義靜態函式有以下好處:   <1> 其他檔案中可以定義相同名字的函式,不會發生衝突。   <2> 靜態函式不能被其他檔案所用。