函式呼叫問題,c語言呼叫函式問題

時間 2022-12-02 07:30:54

1樓:匿名使用者

雖然你覺得「執行成功了,但是出現警告」,可是這裡的警告卻揭示出你所犯的乙個重大概念錯誤。在c語言中,乙個引數只能以乙個值的方式被傳遞。在你所定義的print函式中,你定義了乙個引數p,但在main裡面呼叫print函式時,你卻希望一次將三個引數傳遞過去。

這是不可能做到的。程式並沒有按照你的想象執行,而是先將and(x,y)計算出來成為乙個整數值,然後試圖將其作為乙個函式指標傳過去,因此出現上述警告。

leo239的方法思路是對的,只是有點小疏忽。

printf("%d",(int)*p(x,y))一句中不應寫(int)*,尤其不應寫這個星號。寫成printf("%d",p(x,y))就對了。

另外,從樓主的例子開始就存在乙個問題,即把無返回值的print函式定義成int型。應該把int改為void。

2樓:匿名使用者

#include "stdio.h"

int and(int x,int y)

int print(int (*p)(int,int),int x,int y)

main()

3樓:大樹之上

看來你指標那課沒學好。

c語言呼叫函式問題

4樓:匿名使用者

#include

int max(int n,int a[100])void main()

{int i,j,k,n,a[100];

scanf("%d",&n);

for(i=0;i

5樓:申屠染聞鸞

如果你不寫,除錯時雖然沒error,但是應該會用warning把,雖然你強制執行還是得到正確答案,因為系統預設如果你不寫返回型別的話,它預設是int,所以答案也對了

c語言函式呼叫問題(選擇題)

6樓:風若遠去何人留

b是錯誤的

i+6是表示式 對表示式不可以有&取位址操作。因為表示式沒有自己的位址。

這個操作只能是對變數的。

a 在函式返回指標指向的空間,賦值為6

c和d都是很標準的呼叫,傳入乙個指標&i ,區別在於 c用返回值做了賦值,而d忽略了返回值。這兩種都是合法的。

7樓:

a是先取函式f返回的記憶體單元(引數是&i即i的位址)中儲存的值,並作更改(改為6)

b項 i+6 是算術表示式,不能直接取位址,必須使用變數儲存才能取位址

c項 是定義乙個指向整型的指標p,並賦值為函式f的返回值(該函式返回乙個指標,也就是記憶體位址)

d項 直接以&i為引數執行函式f,返回值不起任何作用

關於php呼叫函式問題 20

8樓:育知同創教育

1.遞推 2.回歸

遞推:遞推為正向的推導,即從前向後的分析問題,尋找遞推的條件。

1-3求和為例

sum(1) = 1 + 0

sum(2) = 2 + 1

sum(3) = 3 + 2 + 1

可發現sum(1) = 1 + 0

sum(2) = 2 + sum(2-1)

sum(3) = 3 + sum(3-1)

這樣一來把求 sum(3) 轉為求sum(2)的把求sum(2)的轉為求sum(1)

回歸自後向前再追逆一遍。論證前期推導的正確性。

經過以上分析所以得函式sum的公式為:

sum(n) = n + sum(n-1)

所以sum(n)的函式原型為:

function sum($n)

但這段**還是有問題,因為還缺少了退出條件。所以寫遞迴的時候注意了。一定要寫乙個 if 語句用來判斷遞迴何時退出。沒有退出條件的遞迴就是死迴圈。

怎麼退出呢?退出條件是什麼?這裡由於是計算1-3之和所以這個函式的成立條件為 00)

return $n + sum($n-1);

return

return $a; //這裡讓它的最後一次迴圈加了0而不是-1,我這裡執行的跟你的不一樣吧。。呵呵。。因為你的if條件是$n > 1 所在 else 裡 $n <= 1 所以你的最後加了1就退出了。。

}最後總結下執行過程

用一行表示下,也許這樣表達你能明白,這段**就相當於如下的公式。

sum(3+sum(2+sum(1)))

如果讓你去執行你會如何呢?

你會先看到外層的sum(3+當看到+號了發現後面還有乙個函式沒有求,哎算了。。。sum(3)現在求不了我把sum(2)求出來再求sum(3)吧,於

是你看sum(2

又是看到+號後面又有了乙個sum函式是求sum(1)的心想這回看你還有沒有了。。嘻嘻。。。好了sum(1)求出來了再把sum(1)的值返回再加上

2 也就是求出了sum(2),sum(2)求出來了再加上3,sum(3)也求出了最後函式執行終止

c++ vs 函式呼叫問題

9樓:

標準的做法是:把所有函式宣告放到最前面,全部宣告完畢之後才是函式的具體實現。

舉例如下:

#include

// 這裡把所有自定義函式的宣告提到最前面,

// 解決由於函式實現順序導致的呼叫未定義函式的問題

int fun1(int x, int y);

int fun2(int x);

void fun3(void);

.............

// 結束宣告

void main(void)

int fun2(int x)

int fun1(int x, int y)

void fun3(void)

注意上面fun2實現裡面呼叫了fun1, 而fun2實現卻在fun1之前,

由於在最前面已經宣告了fun1, 所以fun2這樣呼叫fun1不會有問題。

把自定義函式的宣告放到最前面的好處是,你完全不用考慮函式之間相互呼叫導致的函式實現順序問題,因為全部都在前面宣告了。

10樓:

自定義函式多了,解決辦法就是把函式單獨寫在乙個標頭檔案裡,在主函式前包含這個標頭檔案就行了;在自定義函式中呼叫另乙個自定義函式,要保證被呼叫的自定義函式在主調函式前定義,否則就要在主調函式中宣告。不然就存在你說的問題。

11樓:草叢裡的落葉

當你新增函式時,把你要函式呼叫的函式定義在該函式之前。

12樓:匿名使用者

你建的什麼工程啊,這麼牛叉。

你的新增分組2所在的那個函式怎麼跟上乙個函式的}放在一行上了。

13樓:匿名使用者

以樓上的方法可以解決幾乎所有的函式呼叫申明的問題。不能解決那就肯定是你**寫錯了。貼下**吧

14樓:

可以將所有函式在main前宣告,在main後實現

c語言函式呼叫問題

15樓:匿名使用者

兩者寫法不一樣,引數是可以省略的,也就是說下面兩種形式是一樣的:

void update_compare(epwm_info*);

void update_compare(epwm_info*epwm_info);

16樓:

函式宣告不需要形參名字 只需要有形參型別就行了。 type* 代表的是type型別的指標

17樓:匿名使用者

void update_compare(epwm_info*) ——》函式宣告,epwm_info* 這個是函式的引數部分,但這個引數並沒有申明他的「引數例項」,只是說明了引數的型別 【因為這裡並不需要使用這個引數例項】

void update_compare(epwm_info *epwm_info)

c# 函式呼叫問題 5

18樓:匿名使用者

這個就是 傳說中的遞迴 啦,這個方法大概是用來新增子節點的,還缺少新增父節點**, 大概思路就是迴圈迭代 資料集合 ,判斷父節點 新增到treeview 然後根據這個父節點再去遍歷該節點的子節點

for(int i=0,i希望對你有用。

19樓:浩小宇

首先要修改訪問修飾符把private改成public比如你這個方法在class1 這個類裡面,已你現在的寫法可以class1 c1=new class1();

c1.gettreenode();

這樣,或者你可以把這個方法改成靜態方法

public static void gettreenode(treenode node){}

那你呼叫的地方就可以

class1.gettreenode();這樣呼叫了

20樓:匿名使用者

private void gettreenode(treenode node)

說明只能在類內部呼叫;

類內部呼叫,如:this.gettreenode(tempnode);//其中tempnode是傳入的引數,這個引數從什麼地方取值,怎麼取值,具體要看是在什麼地方呼叫;

這個方法沒有返回值,且這是乙個遞迴方法,當滿足某個條件時,會彈出messagebox訊息,當彈出訊息後需要使用者介入點選 確定後再繼續該方法的執行。

21樓:耐特青年

修改這個函式為public,在本類中直接this.gettreenode(),如果在其他類呼叫,例項乙個,然後再呼叫。

22樓:匿名使用者

將方法訪問修飾符改為public,然後new本類的物件,然後傳入treenode引數即可呼叫。

c語言函式呼叫問題,C語言函式呼叫問題

貌似風輕 函式的使用有兩種方式 1 在main函式之前宣告,最後在寫函式體 include void print line 宣告void print message 宣告main void print line void print message 2 直接在main函式之前寫函式體 include...

c語言函式呼叫問題,C語言如何呼叫函式

int 和 void 的區別 int 返回值,void 不返回值。當需要返回值給主函式時,用int 當不需要返回值給主函式時,用void。至於括號裡的內容 int n是接收主函式的實參作為形參,就是函式中要用到這個形參。如果不需要從主函式中接收實參,那麼就用void。至於返回值 當函式返回值給主函式...

c語言函式的遞迴呼叫,C語言的函式巢狀呼叫與函式遞迴呼叫有什麼區別

是的,區域性變數會新定義一次,不過僅侷限於區域性變數 全域性變數和靜態變數都是全域性的,要是還沒學暫時不用管 並不能說是 同時 應該說是 同樣 時間上肯定是按照呼叫的先後順序的。遞迴確實會讓程式變慢,但只是相對於不需要遞迴的等價 而且原因也不是記憶體分配導致的,而是因為函式呼叫產生的。這個遞迴呼叫怎...

c語言函式呼叫

記得可以直接 include 1.c 或者使用標頭檔案,鏈結時同時鏈結上1.c 剛才試了一下,include 1.c 是可以的 1.c include void ttt 2.c include include 1.c main 最簡單的辦法是在另外乙個檔案中 include 1.c 同時要跟另外這個...

C語言的函式呼叫是遞迴嗎,C語言的函式呼叫是遞迴嗎?

沒記錯的話,c語言中的函式直接或間接呼叫自己的過程叫遞迴例如 有main函式,函式a,c。直接呼叫型遞迴 main函式呼叫函式a,而a不能直接解決問題,所以改變引數後去再次呼叫函式a。比如有三個人,人1說他比人2小1歲,人2說他比人3小一歲,人3說他10歲,求人1幾歲。就需要遞迴解決,簡介呼叫就是m...