C語言自學筆記 C函式和指標

2021-09-12 15:49:35 字數 2731 閱讀 9616

①函式指標:主語是指標,即指向函式的指標。(可以參照整型指標,字元型指標等概念來理解)

②函式指標實際上是函式**在記憶體中的起始位址。

③示例: int (*sub)(num1,num2);

a,int宣告函式的返回值是整型

b,(*sub)通過()結合兩個物件使他們具有更高的運算優先順序,通知編譯器這是乙個指標型別的物件

c,(num1,num2)帶引數說明這個物件是個函式

d,總結:該定義即是乙個指向sub(num1,num2)的指標,也可稱作為函式sub(num1,num2的指標)

void f1(char*);//無 返回值  入口引數是指標  的乙個函式宣告

void f2(char*);

int round (double);//返回整型 入口是雙精度浮點型的 乙個函式宣告

void (*pf)(char*);//乙個指標 指向乙個無返回值 入口引數是char型指標 的函式

pf=f1;//合法操作 給指標賦值 賦的值為函式f1(char*)的函式名 也就是該函式的內 存位址 同時該函式的型別與指標宣告是的型別(==返回值型別/入口引數型別/入口引數個數==)相同。

pf=f2;//合法

pf=round;//無效 round(double)函式的返回值型別為整型 入口引數為double 均不是pf指標宣告時要求的==適當型別==。

pf=f1();//無效f1()並不是乙個位址,函式的位址是函式名(不帶小括號的)。

②用法1:將函式指標用作另外乙個函式的引數。看起來有點繞其實很好理解:將函式指標看成乙個整體假設我將它用a代替。

int f(a);//宣告乙個函式 返回值是int型的值 入口引數是「」函式指標型的引數

再來看乙個複雜一點的:

void show(void(*fp)(char*),char*);

//一步一步來理解這個宣告:void show()說明這是乙個無返回值的函式

//(***,***)這個逗號說明該函式有兩個入口引數

//逗號左邊是void (*fp)(char*)即乙個函式指標 (乙個指向函式**起始位址的指標)

//逗號右邊是char*乙個指向字元的指標

//至此可以完成乙個功能即將乙個函式指標作為其它函式的引數。

//通過這種方式可以實現對 適當型別 函式的呼叫。(注意是指定了函式的型別並沒有指定函式名)

/*func_ptr.c--使用函式指標*/

# include # include # include char showmenu(void);

void eatline(void);//

void toupper(char* str);

void tolower(char* str);

void transpose(char* str);

void dummy(char* str);

void show(void (*fp)(char*),char *str);

int main(void)

; char copy[81]=;

char choice=0;

void (*ptfn)(char*);//宣告乙個指標 該指標指向乙個函式

//所指向的函式沒有返回值 入口引數為乙個指向char的指標

//請注意pfun是指標 (而不是*pfun)在賦值時請直接給pfun賦值乙個函式位址(函式名)

puts("enter a string empty line to quit:");

while(gets(line)!=null&&line[0]!='\0')

strcpy(copy,line);

show(ptfn,copy);

}puts("enter a string empty line to quit:");

} puts("bye");

return 0;

}/************************************==

功能:將使用者由鍵盤輸入的選擇字元返回

入口引數:無

返回值:使用者選擇的字元

*****************************************/

char showmenu(void)

return ans; }

void eatline(void) }

/*把接收到的字串 由小寫轉換為大寫*/

void toupper(char* str)

}/*把接收到的字串 由大寫轉換為小寫*/

void tolower(char* str)

} /*把接收到的字串 大小寫切換*/

void transpose(char* str)

else if(isupper(*str))

str++;

} }/*接收到的字串 不進行任何操作*/

void dummy(char* str)

/*函式選擇******************************===

入口引數:1,void (*fp)(char*) 函式選擇

2,char *str要操作的字元

返回值:無

****************************************=*/

void show(void (*fp)(char*),char *str)

自學C語言 函式

函式是c程式設計的核心,也是c程式設計的哲學。通過前幾課的學習,你已經了解了c語言的 庫函式是由編譯器提供的完整函式。本課將介紹使用者自定義函式,顧名思義,這是由你一一程式設計師定義的函式。本課將介紹以下內容 函式是 c程式設計的核心,也是 c程式設計的哲學。通過前幾課的學習,你已經了解了 c語言的...

《C語言筆記 函式指標》

一,函式指標的實質 1,函式指標的實質還是指標,還是指標變數。本身佔四個位元組 32位系統 2,函式指標 陣列指標 普通指標之間本身沒有區別,區別在於指標指向的東西是個什麼玩意。函式指標指向乙個函式,陣列指標指向乙個陣列。3,函式的實質是一段 這一段 在記憶體中是連續分布的 乙個函式的大括號括起來的...

《C語言筆記 函式指標》

一,函式指標的實質 1,函式指標的實質還是指標,還是指標變數。本身佔四個位元組 32位系統 2,函式指標 陣列指標 普通指標之間本身沒有區別,區別在於指標指向的東西是個什麼玩意。函式指標指向乙個函式,陣列指標指向乙個陣列。3,函式的實質是一段 這一段 在記憶體中是連續分布的 乙個函式的大括號括起來的...