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

2021-03-22 03:05:47 字數 5646 閱讀 6245

1樓:寂寞而莫我知也

可以定義一個函式指標,比如char *prefect(char (*p)[5] int n) 這個就是定義一個字元指標函式,他定義的引數是陣列指標。他返回一個指向字元型別的地址。 還有我們還可以定義一個函式指標變數 。

int (*pf)(); int add(int i,int j);pf=add; k=(*pf)(i,j)

2樓:樂酷科技

函式名 不是指標 陣列名是指標

3樓:匿名使用者

1樓怎麼混到8級的,函式名跟陣列名差不多的!函式名能當指標用的!

c語言中函式名就是一個指標嗎

4樓:非常可愛

是的。函式

指標就是函式的指標,它是一個指標,指向一個函式。這正如用指標變數可指向整型變數、字元型、陣列一樣,這裡是指向函式。

例:a) char * (*fun1)(char * p1,char * p2);

b) char * *fun2(char * p1,char * p2);

表示式相比,唯一不同的就是函式的返回值型別為char**,是個二級指標。

c) char * fun3(char * p1,char * p2);

fun3是函式名,p1,p2是引數,其型別為char *型,函式的返回值為char *型別。

擴充套件資料

函式指標使用的例子

#include

#include

char * fun(char * p1,char * p2)

else

}int main()

5樓:匿名使用者

是的。c語言中, 函式名也稱為函式的

指標,所以c語言中函式名就是一個指標。

「函式指標」本身首先應是指標變數,只不過該指標變數指向函式。這正如用指標變數可指向整型變數、字元型、陣列一樣,這裡是指向函式。

如前所述,c在編譯時,每一個函式都有一個入口地址,該入口地址就是函式指標所指向的地址。有了指向函式的指標變數後。

可用該指標變數呼叫函式,就如同用指標變數可引用其他型別變數一樣,在這些概念上是大體一致的。函式指標有兩個用途:呼叫函式和做函式的引數。

6樓:匿名使用者

c語言中, 函式

名也稱為函式的指標,所以c語言中函式名就是一個指標。

1,例如:

showmenu是一個函式名,可以看到他的值是一個地址。

&showmenu是對函式取地址,指向和showmenu同樣的地址。

可以看出,showmenu是佔用一個位元組的,而作為指標&showmenu卻佔用四個位元組。

所以,函式名佔用空間的。

2,‍函式指標

指向函式的指標包含了函式的地址,可以通過它來呼叫函式。宣告格式如下:

型別說明符 (*函式名)(引數)

其實這裡不能稱為函式名,應該叫做指標的變數名。這個特殊的指標指向一個返回整型值的函式。指標的宣告筆削和它指向函式的宣告保持一致。

指標名和指標運算子外面的括號改變了預設的運算子優先順序。如果沒有圓括號,就變成了一個返回整型指標的函式的原型宣告。

例如:void (*fptr)();

把函式的地址賦值給函式指標,可以採用下面兩種形式:

取地址運算子&不是必需的,因為單單一個函式識別符號就標號表示了它的地址,如果是函式呼叫,還必須包含一個圓括號括起來的參數列。可以採用如下兩種方式來通過指標呼叫函式:

x=(*fptr)();  x=fptr();

第二種格式看上去和函式呼叫無異。但是有些程式設計師傾向於使用第一種格式,因為它明確指出是通過指標而非函式名來呼叫函式的。下面舉一個例子:

void (*funcp)();  void filefunc(),editfunc();

main()    void filefunc()

void editfunc()

程式輸出為:

filefunc  editfunc

7樓:匿名使用者

可以這樣理解,函式名就像陣列名一樣,只不過函式名是**段的指標,而陣列名是資料段的指標

8樓:匿名使用者

沒錯,函式名就像是陣列名,也是指標,獨有特點就是①存在於**段、②定值(程式載入進記憶體後就不能改變了);相對的,普通的指標是可以移動的(改變他的指向)

9樓:

不一定。你可以定義一個指標函式。

c語言如何宣告一個返回函式指標的函式?

10樓:

c語言指向函式的指

針承載的資訊比較複雜,組織起來要素要寫全。根據指向函式的指標的書寫語法,下面的**就是一個返回函式指標的函式:

int (*f(void))(int)

以下**可以驗證上述函式的正確性:

//#include "stdafx.h"//if the vc++6.0, with this line.

#include "stdio.h"

int fun(int n)

int (*f(void))(int)

int main(void)

輸出是:

abcdef100

11樓:匿名使用者

typedef int (*aa)();

aa function();

12樓:匿名使用者

返回值型別名 *函式名( 形參列標 ) //函式名前的*號不能丟

13樓:匿名使用者

int (*pf)();pf=f; /*f為函式名*/

函式指標變數

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

14樓:你好_我來也

int (*(* func)())();

int* (*func1)();

在c語言中什麼是指標?指標是幹什麼用的?,有什麼意義?

15樓:仙

寫簡單的程式的話不用指標也行了吧. 比如這裡a是一個地址(編譯後), 為了讀寫這個地址單元裡的東西,可以用p,也可以用一般變數a.

對於指標的便利,我現在能想到的,可能是:

函式a呼叫函式b時,把一個記憶體塊的地址傳遞過去,這樣可以避免按值傳遞時開闢一個棧空間並逐一拷貝記憶體塊裡的值的開銷(c++裡的拷貝建構函式在做這件事),並且a,b函式操作的都是同一個記憶體塊裡的東西,如果這就是目的,那麼傳指標就是很有效率的做法(如果不用指標就可能要用一個全域性的變數了). 用一個指標(函式指標)存放一系列同型別的函式名(入口地址),方便函式呼叫. void*型別指標可以存放任何型別指標.

讓父類型別指標指向任何子類物件可以實現動態繫結. 寫著寫著似乎指標還挺有用,呵呵.

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

16樓:匿名使用者

?c/c++的指標的靈活,常把許多初學者搞暈,連高手也是如此。

1.當然,可以呀,一切資料都可返回;

2.複合指標型別直接表示非常麻煩(連高手都是這樣),可以分解成多個簡單型別;

typedef

void funtype(void);

funtype * num[100];

分解後簡單多了!!!!!

3. 因為函式名不是字串,初始化時,沒法用while for實現:

最簡單的表示方法,:

typedef

void funtype();

funtype * num[100]=;

// 100個函式名都要列出,不能用省略號這樣 num[i] // i=0,...,99 可表示你的任意一個函式了,這樣你可以用

for,while 了!

你有不明白的再追問。

17樓:道祖一鴻鈞

1、陣列裡面可以存放函式地址,這就是傳說中的函式指標陣列。

2、陣列指標就是一個指標裡面存放陣列的首地址的指標,int (* num)[ ]是這種型別。

3、定義

typedef int (* a)(引數型別列表);//重定義函式名a num[100];

int i ;

for(i = 1;i<=100;i++)num[i] = hsi;

18樓:匿名使用者

1.函式指標的陣列定義方法:返回值型別( * 指標變數名[number]) (形參列表)。

例如:double add(double a,double b){};

double sub(double a,double b){};

double mul(double a,double b){};

double div1(double a,double b){};

double (*oper_func)(double, double) = ;//函式指標的陣列定義

2.函式指標是指向函式的指標變數。函式指標有兩個用途:呼叫函式和做函式的引數。

函式指標的宣告方法為:

返回值型別( * 指標變數名) (形參列表);

「返回值型別」說明函式的返回型別,「( * 指標變數名)」中的括號不能省,括號改變了運算子的優先順序。若省略整體則成為一個函式說明,說明了一個返回的資料型別是指標的函式,後面的「形參列表」表示指標變數指向的函式所帶的引數列表。

例子:#include

int max(int x,int y)

int main()

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

指標函式是個函式,其返回值是指標 函式指標是一個指標,指向函式的入口地址 典型的指標函式如 void malloc unsigned int size 這個記憶體分配函式就是個返回void 指標型別的函式。若寫成void fun ptr unsigned int size 這時fun ptr表示一個...

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...