簡述static關鍵字、void與void *(void指針)、函數指針

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.函數指針的組成部分包括:函數形參的有序列表,函數返回值類型。引用

相關文章
相關標籤/搜索