亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

您好,為何程序開頭定義了“bool IsOdd(int );”求解釋?

您好,為何程序開頭定義了“bool IsOdd(int );”求解釋?

慕運維8079593 2021-10-06 20:11:13
這是程序,判斷是奇數還是偶數。我想知道為何程序開頭要定義“bool IsOdd(int );”,我把這句話去掉,程序就出錯了。#include "stdio.h"#include "iostream"using namespace std;bool IsOdd(int );bool IsEven(int n){if (n==0){return true;}else{return IsOdd(n-1);}}bool IsOdd(int n){return !IsEven(n);}int main(){cout << IsOdd(9);}
查看完整描述

2 回答

?
catspeake

TA貢獻1111條經驗 獲得超0個贊

開頭的bool IsOdd(int );是函數的聲明,也就是告訴編譯器說有個函數叫IsOdd,其參數是int,返回值是bool。這樣編譯器如果在該函數的定義之前看到類如IsOdd(n-1)的語句時就知道這是一個函數調用,等編譯了IsOdd函數的定義后再將其函數地址補回到調用處。

如果去掉則編譯器在第一次碰到IsOdd(n-1)時就不知道這是什么鬼,所以就報錯了。

不想額外加這一行的辦法是把bool IsOdd(int)的實現---也就是定義了,放到調用函數之前,在你的代碼中就是把main前面的IsOdd整體挪到前面------------囧了個囧, 您這是互相調用?。?那沒轍了,只能這么寫了。 非互相調用的,比如a調用b,但b不調用a的話,可以先定義b,然后定義a,則無需在a前面再增加函數聲明; 但如果先定義a則需要在a前面增加b的函數聲明。

查看完整回答
反對 回復 2021-10-10
?
藍山帝景

TA貢獻1843條經驗 獲得超7個贊

這是函數的聲明,告訴編譯器這是個函數,定義在其他地方。
因此在IsEven函數體里可以調用IsOdd函數。
如果不寫的話,編譯器不知道IsOdd是什么,因為IsOdd寫在IsEven后面,編譯器還沒有對IsOdd進行編譯。

查看完整回答
反對 回復 2021-10-10
  • 2 回答
  • 0 關注
  • 292 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號