C語言能通過函式的位址呼叫函式嗎?

2025-07-26 09:20:51 字數 3794 閱讀 3512

1樓:網友

1.當然可以,函式名即為函式指標,也是其位址。

只要定義乙個函式指標(按照要呼叫的函式形式進行定義),將要呼叫的函式名賦予它,即可呼叫。

#include

typedef void(*pfun)(int x); // 指標函式:指向void返回,帶引數int引數的函式。

void output(int x)

int main()

2樓:網友

當然可以通過函式的位址呼叫函式(有專門的函式指標),但不是&fun這樣取法。

正確的取法:

#include

void f(int i)

int main()

這兩個c語言程式設計,為什麼乙個呼叫函式需要取位址符號,乙個不用

3樓:匿名使用者

因為兩個使用的呼叫函式的**並不相同,不同的程式設計方法自然有不同的定義和方法了。

怎樣在c語言中用函式返回乙個數的位址呢?

4樓:網友

首先函式返回乙個指標型別即返回位址。

例:int * func(void)

int a= 10;

int *p = &a;

return p;}

c語言中主函式和被調函式位置能變嗎?

5樓:網友

#include

int plus(int x,int y);

int main()

int plus(int x,int y)最好先宣告一下函式 int plus(int x,int y); 返回型別是int

然後順序無所謂了。

你出錯的那個 plus(int x,int y); 多了個分號 不是函式定義。

6樓:_葉子妞妞

主函式和被調函式位置可以改變。不過如果被調函式和主調函式不在同乙個檔案中,或者被調函式在主調函式的同一檔案內的下方,那麼在主調函式呼叫被調函式前,需要進行被調函式的宣告。

下面以主調函式為main,被調函式為func做例子,編寫示例**,輔助理解。

1 主調函式與被調函式在同一檔案內,且被調函式在前。

這種情況直接呼叫即可。

#include

void func(void)

int main()

2 主調函式與被調函式在同一檔案內,且被調函式在後。

需要在呼叫前宣告。

#include

void func(void);//在被調前宣告,也可以在函式內宣告,如下方註釋。

int main()

void func(void)//被調函式在主調函式之後。

3 主調函式與被調函式不在同一檔案內。

可以採用同第2種同樣的宣告方式,不過建議增加extern關鍵字,表明該函式為外部檔案定義,但該關鍵字並非強制,沒有同樣不會出問題。

檔案#include

void func(void)//存在於中的func.

檔案#include

extern void func(void);//宣告為外部函式,無extern也可以。 同樣可以宣告在函式內。

int main()

不過更常用的方式是把函式宣告寫在標頭檔案中,並在主調函式所在的檔案引用。

檔案#ifndef _a_h_//這兩行是為避免重複引用和迴圈引用。

#define _a_h_

void func(void);//將函式宣告置於標頭檔案。

#endif

這種情況下需要寫成:

#include

#include //引用標頭檔案。

int main()

7樓:網友

c語言的自定義函式一般寫在主函式前面,如果寫在後面也可以,但是在前面要新增乙個宣告。比如該例子,在主函式前面新增int plus(int x,int y);即可。

8樓:操羽

這原因很簡單,c語言的執行過程是這樣的,先執行main函式也就是主函式,執行到plus這個函式的時候並沒有被宣告過所以會報錯,但是放在了main函式之前就把plus這個函式給出來就不存在這個問題了,最簡單的解決方式是,在最開始的地方把函式全部宣告一下,這樣main函式以及其它函式在呼叫的時候就不會出現沒有被宣告的錯誤了!

9樓:網友

樓主,其實你的第乙個程式沒多大的錯,問題出在被調函式。

plus(int x,int y);

後面多了個 分號,只要去掉那個分號程式就能執行。

c語言中,函式名代表函式的入口位址嗎!!!求大神!求解析

10樓:後花園中的後花園

「如果在程式中定義了乙個函式,在編譯時會把函式的源**轉換為可執行**並分配一段儲存空間。這段記憶體空間有乙個起始位址,也稱為函式的入口位址。函式名代表函式的起始位址。

呼叫函式時,從函式名得到函式的起始位址,並執行函式**。」摘自《c程式設計(第五版)》-譚浩強,p265頁。

11樓:網友

函式是c程式的**塊,當函式被呼叫執行時作業系統為函式分配乙個乘坐入口位址的「位址」。函式被呼叫執行時,函式體中的區域性變數、函式的引數從入口位址開始被分配記憶體空間,函式的入口位址是執行函式時的「進入點」。

也就是說函式的名字型現函式的入口位址。

12樓:

對,比如int*p;

p)()=max();

即代表指標p指向max()函式首位址。

13樓:

要知道main函式也是由其他的程式呼叫的。

我們編寫的程式,最終是不存在所謂的函式名的,有的只有記憶體單元位址0xffeedd00.

我們的程式執行時,程式載入到記憶體,比方說整個程式所佔用的記憶體範圍是0xffee0000 ~ 0xffeedd00,這麼多。

假設程式有乙個小函式fun(),那麼它的範圍可能是0xffee0000~0xffee00ff。

那麼函式fun()的入口位址是多少? 0xffee0000。。

那麼函式名fun實際上就是0xffee0000的別稱。

你用乙個指標指向這個函式,那麼你把 指標 = 函式名,實際就是把0xffee0000這個記憶體單元的位址給指標p。

所以,結論是:

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

c語言中到底如何通過位址值的傳送在被調函式中直接改變呼叫函式中變數的值,請解釋詳細一點

14樓:天雲一號

這個就是2種函式呼叫方式中的位址傳遞呼叫方式(另一種是傳值方式)。

#include

void swap(int *p1, int *p2) // 交換兩個整數——交換形參值(位址)

void main()

15樓:千子濯

哈哈,自然是不會變了,這是值傳遞,也就是將數值傳給被調函式,要實現通過函式呼叫改變主調函式的變數值,要用陣列傳遞或指標傳遞。

16樓:網友

#include

void changevalue(int * pointer)int main()

1,lz執行以上程式就應該可以明白了。

2,在changevalue的方法中,我們使用了乙個int*,那麼傳遞的就是乙個位址,在方法裡面我們將其內容進行改變,從而inum的值也要進行改變。

3,希望對lz所有幫助。

c怎樣通過函式指標呼叫成員函式

函式存放在記憶體的 區域內,它們同樣有位址.如果我們有乙個int test int a 的函式,那麼,它的位址就是函式的名字,這一點如同陣列一樣,陣列的名字就是陣列的起始位址。1 函式指標的定義方式 data types func pointer data types arg1,data types...

C語言指標建立函式問題,C語言指標呼叫函式問題,急求解釋(本題是《c和指標》上的題目)

第乙個表示傳遞graphadjlist型別的引用g,第二個表示傳遞graphadjlist型別的指標g 另外這是c 不是c。c語言指標呼叫函式問題,急求解釋 本題是 c和指標 上的題目 c語言指標作函式引數時的返回問題 首先,弄懂函式引數都是靠值傳遞。指標也是。進入函式後,函式建立幾個空間給形參,再...

c語言函式呼叫引數傳遞的是什麼,C語言函式呼叫引數傳遞的是什麼

c語言傳遞的是值而不是位址,這一點從vb轉過來的程式設計師一定要注意。否則不經意間就會犯錯誤。另外下層函式修改上層函式變數不是一種好習慣,容易引發錯誤。c語言中函式可以返回乙個函式值,如果你需要返回多個函式值可以用下面的形式 fun int a,int b main 如果按vb的習慣,fun int...