簡述static關鍵字、void與void *(void指標)、函式指標

滴水微瀾發表於2017-10-18

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.函式指標的組成部分包括:函式形參的有序列表,函式返回值型別。

相關文章