static關鍵字
1.修飾局部變量,延長局部變量的生命周期。
使變量成為靜態局部變量,在編譯時就為變量分配內存,直到程序退出才釋放存儲單元。
2.修飾全局變量,限制全局變量的使用范圍為本文件中。
全局變量默認為靜態全局變量,在編譯時就為變量分配內存,直到程序退出才釋放存儲單元。
3.修飾函數,限制函數的使用范圍為本文件中。
使函數成為靜態函數,對函數的連接方式產生影響。如果想讓內部函數被外界引用,可在函數前添加extern修飾。
void與void *(void指針)
1.void 即‘無類型’,void * 即‘無類型指針’,可以指向任何數據類型。
例如:
int * print;
void * pvoid;
pvoid = print;
2.void的作用
a.對函數返回的限定,例如:
void func (int ,int)
b.對函數參數的限定,例如:
int func(void)
3.void *的作用
a.作為形參,在函數中傳遞,表示任意類型,例如:
void * func (void *para1,void *para2)
函數指針
a.函數指針是什么?
一個函數占用一段連續的內存地址,當調用一個函數時,實際上是跳轉到函數的入口地址,執行函數體代碼,然后返回。
函數的入口地址怎么確定呢,它是由函數名標記的,實際是函數名就是函數的入口地址。
函數指針是一種特殊的指針,它指向函數的入口。
b.如何定義一個函數指針變量?
定義兩個函數
int func1(int arg1,char arg2)
int func2(char arg2)
定義兩個函數指針變量
int (* pfunc1) (int,char) = func1
int (* pfunc2) (char) = func2
只有相同的函數指針類型才可以賦值。
c.如何區別兩個函數
函數指針類型是由函數簽名決定的,函數簽名是函數的身份證,不同類型函數的函數簽名是不一樣的。
同理,具有相同函數簽名的兩個函數是同一個函數。
函數簽名的組成部分包括:函數名,函數形參的有序列表,函數返回值類型。
d.函數指針的組成部分包括:函數形參的有序列表,函數返回值類型。