c語言 指標函式跟函式指標的區別

2022-02-14 13:21:05 字數 5309 閱讀 6146

1樓:匿名使用者

指標函式是個函式,其返回值是指標;

函式指標是一個指標,指向函式的入口地址;

典型的指標函式如:void* malloc(unsigned int size);

這個記憶體分配函式就是個返回void*指標型別的函式。

若寫成void (* fun_ptr)(unsigned int size);

這時fun_ptr表示一個函式指標。指向一個引數為unsigned int size,返回值為void型別的函式。

2樓:

本質的區別是:

一個是函式 一個是指標變數

1、指標函式是指帶指標的函式,即本質是一個函式。函式返回型別是某一型別的指標

型別識別符號 *函式名(參數列)

int *f(x,y);

2、函式指標是指向函式的指標變數,即本質是一個指標變數。

int (*f) (int x); /* 宣告一個函式指標 */f=func; /* 將func函式的首地址賦給指標f */希望對您有所幫助

c語言指標函式和函式指標有什麼不同

3樓:匿名使用者

如樓上所說 。

指標函式 的本質是 函式 ,只是他的返回值 型別 是指標變數。

比如 int * a(int num); 這就是一個 指標函式。

函式指標 是一個 指標變數 ,只不過 他是 指向函式的 指標變數。

比如 有函式定義 如上 int * a(int num); 再有 int (*pf)(int num);

則是 pf = a;就把 函式a的首地址 賦值給 pf 函式指標了。

4樓:匿名使用者

指標函式本質是函式,函式的返回值為指標;而函式指標本質是指標,指向一個函式的指標。

5樓:匿名使用者

指標函式是說一個函式,它的返回值是一個指標;

函式指標是一個指標,它指向一個函式。

c/c++函式指標與指標函式等區別

6樓:處搖胼手胝足

函式指標是指標,指向該函式入口地址的指標;

指標函式是函式,返回指標型別的函式;

c語言中函式指標用法

7樓:匿名使用者

函式在記憶體中有一個物理位置,而這個位置是可以賦給一個指標的。一零點函式的地址就是該函式的入口點。因此,函式指標可被用來呼叫一個函式。

函式的地址是用不帶任何括號或引數的函式名來得到的。(這很類似於陣列地址的得到方法,即,在只有陣列名而無下標是就得到陣列地址。)

怎樣說明一個函式指標變數呢 ?

為了說明一個變數 fn_pointer 的型別是"返回值為 int 的函式指標", 你可以使用下面的說明語句:

int (*fn_pointer) ();

為了讓編譯器能正確地解釋這句語句, *fn_pointer 必須用括號圍起來。若漏了這對括號, 則:

int *fn_pointer ();

的意思完全不同了。fn_pointer 將是一個函式名, 其返回值為 int 型別的指標。

2:函式指標變數

在c語言中規定,一個函式總是佔用一段連續的記憶體區, 而函式名就是該函式所佔記憶體區的首地址。 我們可以把函式的這個首地址 ( 或稱入口地址 ) 賦予一個指標變數, 使該指標變數指向該函式。然後通過指標變數就可以找到並呼叫這個函式。

我們把這種指向函式的指標變數稱為 " 函式指標變數 " 。

函式指標變數定義的一般形式為:

型別說明符 (* 指標變數名 )();

其中 " 型別說明符 " 表示被指函式的返回值的型別。 "(* 指標變數名 )" 表示 "*" 後面的變數是定義的指標變數。 最後的空括號表示指標變數所指的是一個函式。

例如: int (*pf)();

表示 pf 是一個指向函式入口的指標變數,該函式的返回值 ( 函式值 ) 是整型。

下面通過例子來說明用指標形式實現對函式呼叫的方法。

int max(int a,int b)

main()

從上述程式可以看出用,函式指標變數形式呼叫函式的步驟如下:

1>. 先定義函式指標變數,如後一程式中第 9 行 int (*pmax)(); 定義 pmax 為函式指標變數。

2>. 把被調函式的入口地址 ( 函式名 ) 賦予該函式指標變數,如程式中第 11 行 pmax=max;

3>. 用函式指標變數形式呼叫函式,如程式第 14 行 z=(*pmax)(x,y); 呼叫函式的一般形式為: (* 指標變數名 ) ( 實參表 ) 使用函式指標變數還應注意以下兩點:

a. 函式指標變數不能進行算術運算,這是與陣列指標變數不同的。陣列指標變數加減一個整數可使指標移動指向後面或前面的陣列元素,而函式指標的移動是毫無意義的。

b. 函式呼叫中 "(* 指標變數名 )" 的兩邊的括號不可少,其中的 * 不應該理解為求值運算,在此處它只是一種表示符號。

3:指標型函式

前面我們介紹過,所謂函式型別是指函式返回值的型別。 在c語言中允許一個函式的返回值是一個指標 ( 即地址 ) ,這種返回指標值的函式稱為指標型函式。

定義指標型函式的一般形式為:

型別說明符 * 函式名 ( 形參表 )

其中函式名之前加了 "*" 號表明這是一個指標型函式,即返回值是一個指標。型別說明符表示了返回的指標值所指向的資料型別。

如:int *ap(int x,int y)

表示 ap 是一個返回指標值的指標型函式, 它返回的指標指向一個整型變數。下例中定義了一個指標型函式 day_name ,它的返回值指向一個字串。該函式中定義了一個靜態指標陣列 name 。

name 陣列初始化賦值為八個字串,分別表示各個星期名及出錯提示。形參 n 表示與星期名所對應的整數。在主函式中, 把輸入的整數 i 作為實參, 在 printf 語句中呼叫 day_name 函式並把 i 值傳送給形參 n 。

day_name 函式中的 return 語句包含一個條件表示式, n 值若大於 7 或小於 1 則把 name[0] 指標返回主函式輸出出錯提示字串 "illegal day" 。否則返回主函式輸出對應的星期名。主函式中的第 7 行是個條件語句,其語義是,如輸入為負數 (i<0) 則中止程式執行退出程式。

exit 是一個庫函式, exit(1) 表示發生錯誤後退出程式, exit(0) 表示正常退出。

應該特別注意的是函式指標變數和指標型函式這兩者在寫法和意義上的區別。如 int(*p)() 和 int *p() 是兩個完全不同的量。 int(*p)() 是一個變數說明,說明 p 是一個指向函式入口的指標變數,該函式的返回值是整型量, (*p) 的兩邊的括號不能少。

int *p() 則不是變數說明而是函式說明,說明 p 是一個指標型函式,其返回值是一個指向整型量的指標,*p 兩邊沒有括號。作為函式說明, 在括號內最好寫入形式引數,這樣便於與變數說明區別。 對於指標型函式定義,int *p() 只是函式頭部分,一般還應該有函式體部分。

main()

char *day_n

ame(int n)

;return((n<1||n>7) ? name[0] : name[n]);

}本程式是通過指標函式,輸入一個 1 ~ 7 之間的整數, 輸出對應的星期名。指標陣列的說明與使用一個陣列的元素值為指標則是指標陣列。指標陣列是一組有序的指標的集合。

指標陣列的所有元素都必須是具有相同儲存型別和指向相同資料型別的指標變數。

指標陣列說明的一般形式為: 型別說明符 * 陣列名 [ 陣列長度 ]

其中型別說明符為指標值所指向的變數的型別。例如: int *pa[3] 表示 pa 是一個指標陣列,它有三個陣列元素, 每個元素值都是一個指標,指向整型變數。

通常可用一個指標陣列來指向一個二維陣列。 指標陣列中的每個元素被賦予二維陣列每一行的首地址,因此也可理解為指向一個一維陣列。圖 6—6 表示了這種關係。

int a[3][3]=;

int *pa[3]=;

int *p=a[0];

main()

本例程式中, pa 是一個指標陣列,三個元素分別指向二維陣列 a 的各行。然後用迴圈語句輸出指定的陣列元素。其中 *a[i] 表示 i 行 0 列元素值; *(*(a+i)+i) 表示 i 行 i 列的元素值; *pa[i] 表示 i 行 0 列元素值;由於 p 與 a[0] 相同,故 p[i] 表示 0 行 i 列的值; *(p+i) 表示 0 行 i 列的值。

讀者可仔細領會元素值的各種不同的表示方法。 應該注意指標陣列和二維陣列指標變數的區別。 這兩者雖然都可用來表示二維陣列,但是其表示方法和意義是不同的

8樓:無法無天

函式名 是 程式在執行時, 函式所佔記憶體單元塊的 首地址 的別稱。

就像陣列一樣。

9樓:

直接給你舉個例子吧:

#include

int max(int a, int b)int main()

10樓:匿名使用者

記憶體地址用法就相當於快遞取件與送件時目的地。用法。。。

11樓:撒德塔念

*func()是一個指向函式的指標,它指向的是函式的入口地址,題目問的是返回值,返回的應該就是一個指標,由於前面寫了int

所以返回的是一個指向整型變數的指標~

求解釋c語言函式指標的作用

12樓:彭珂的課堂

c語言_071_指標的定義和使用_上

13樓:匿名使用者

好吧,假設你已經知道函式指標的寫法和用法。

那麼那段話的意思就是, 你有了一隻手,可以用來裝備並切換**打怪,比如可以裝備刀子,或者裝備棍子。當你的**只有一種或者比較少的時候,可能這隻手切換**的功能不常用到。當到了後期,你的**多了,那你因為有了這隻能裝備並切換**的手,而可以更有效率的打怪。

over

c語言中指標和引用的區別

14樓:匿名使用者

指標,全稱為指標變數,是用來儲存記憶體地址的一種變數。程式中,一般通過指標來訪問其指向的記憶體地址中的內容(資料)。

引用,是c++中提出來的一種新的使用變數的方式,即,給實際變數起個別名,通過這個別名來引用實際的變數。標準c中不支援變數的引用。

這兩個概念沒有任何相關性。

指標是實實在在的變數,有自己的記憶體儲存空間,它可以指向任何有效的變數。

引用是一種形式、方法,定義的引用變數,實際上是原實際變數的另一個名稱(別名),引用變數本身沒有自己的實際儲存空間,操作引用變數,就是在操作實際變數。如:

c語言指標陣列如何存放函式地址C語言指標陣列如何存放函式地址

c c 的指標的靈活,常把許多初學者搞暈,連高手也是如此。1.當然,可以呀,一切資料都可返回 2.複合指標型別直接表示非常麻煩 連高手都是這樣 可以分解成多個簡單型別 typedef void funtype void funtype num 100 分解後簡單多了!3.因為函式名不是字串,初始化時...

c語言 怎麼呼叫指標陣列函式,C語言 怎麼呼叫指標陣列函式

1.函式指標的陣列定義方法 返回值型別 指標變數名 number 形參列表 例如 double add double a,double b double sub double a,double b double mul double a,double b double div1 double a,d...

C語言函式名是不是指標這個指標儲存著什麼是什麼的地址

可以定義一個函式指標,比如char prefect char p 5 int n 這個就是定義一個字元指標函式,他定義的引數是陣列指標。他返回一個指向字元型別的地址。還有我們還可以定義一個函式指標變數 int pf int add int i,int j pf add k pf i,j 函式名 不是...