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

2021-03-22 03:05:47 字數 4203 閱讀 9602

1樓:非常可愛

是的。函式

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

例: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()

2樓:匿名使用者

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

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

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

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

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

3樓:匿名使用者

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

4樓:匿名使用者

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

5樓:匿名使用者

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

6樓:

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

c語言中, 函式名也稱為函式的指標,那函式名是否也佔記憶體空間?

7樓:桑安磊

首先你上面的話是錯誤的,函式名是一段指令的入口地址,它是地址常量,不佔用記憶體空間,只是在編譯階段存在於編譯器的符號表中,例如函式的入口地址是0x123456,在翻譯成機器指令以後,函式名是不存在的其在本質上對應彙編上的jump指令,在執行函式的時候,跳轉到0x123456,這個函式名的本質就是這個地址。

8樓:匿名使用者

經過編譯後,函式實際變成了一小段機器**,並直接通過記憶體地址進行跳轉,本身將不會有名字了,所以不再存在函式名這樣的東西。

c語言是高階語言,我們看見的源**,是給人理解和表達的。cpu能理解的,只能是二進位制的機器碼。

9樓:雨吻月

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

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

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

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

10樓:匿名使用者

函式名也稱為函式的指標, 函式名是函式的首地址,指標當然佔空間

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

11樓:寂寞而莫我知也

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

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

12樓:樂酷科技

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

13樓:匿名使用者

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

c語言中函式名前加*與不加*有什麼區別

14樓:匿名使用者

加*是返回指標

例如:int add();//add()函式返回的是一個int型別的值

int* add();//add()函式返回的是一個int型別的指標

15樓:

函式原型宣告和定義中, 函式名前加 * 的表示返回值是指標。

例如標準庫函式gets():

char *gets ( char *str );

從鍵盤讀入一行字串,如果讀入成功,返回值與str 裡 的 字串相同。

--------------

int (*p)(); 這種宣告是「定義 p 是一個指向函式的指標變數,此函式帶回整型的返回值。」例如:

int max(int,int); //函式原型宣告int min(int,int); //函式原型宣告int (*p)();

int a,b,c;

p=max; // 將函式 max 的入口地址賦給指標變數pscanf("%d,%d",&a,&b);

c=(*p)(a,b); // 等於 呼叫 c=max(a,b);

p=min; // 將函式 min 的入口地址賦給指標變數pc=(*p)(a,b); // 等於 呼叫 c=min(a,b);

16樓:匿名使用者

加*的表示函式指標,可以指向一個函式的地址,然後再呼叫函式。

書上都有,你可以去找找

17樓:宿苓貝雁菱

可以說加不加int是沒有區別的。在ansic的標準中,main的標準返回值是整型,如果你什麼都沒有加,編譯系統會自動加上int型別的。這時如果你使用gcc的話(vc是沒有的)會有一個警告。

void是無型別,表示沒有返回值,你的主函式如果不需要返回的話,最好加上它。

最後,建議你的主函式顯式的使用int型別,並return0;這是一個好習慣,開始的時候沒什麼用,時間長了才能看出來。

c語言指標函式?

18樓:邱俊山

應該是的,還可以用f(a+i)的形式。

19樓:特別想家還有媽

去程式設計嗎?我學這些的是一頭霧水。

C語言中p a就是指標p指向變數a的地址嗎

那要看是什麼情況了,如果是定義的時候賦值就是把a的地址賦給p如 int a int p a 如果不是初始化就是把a的地址賦給p裡儲存的地址,如 int a int b int p p b p指向b的地址 p a 讓b存著a的地址執行結果如下 第二項試圖將a的地址放在p指向的b裡,因為b是 int 而...

C語言中,指標變數該如何使用呢,C語言中指標和指標變數的區別是什麼

int integer 0 為求來 地址運算子,指標用來儲存 源一些變數的bai地址 可以這樣訪du問 pinteger 得到 pinteger這個整形指標裡面的值 zhi0 建議看dao 相關的書,難懂的東西才有意義 所謂指標其實就是用來儲存地址的 就這樣想就好了 比如 int a,p p a 就...

C語言中log函式怎麼使用,C語言中log函式怎麼使用啊

log number 必要的抄 number 引數是襲 double 或任何bai有效的大於 0 的數值表示式。duzhi 說明自然對數是以 e 為底的對數。dao常數 e 的值大約是 2.718282。如下所示,將 x 的自然對數值除以 n 的自然對數值,就可以對任意底 n 來計算數值 x 的對數...