tft每日頭條

 > 生活

 > c語言對函數的認識

c語言對函數的認識

生活 更新时间:2024-07-23 03:17:05

1、函數的返回值與函數要實現的功能的關系

比如,對于月曆程序

c語言對函數的認識(C語言自學函數說明4)1

函數3設計為不返回函數值,所以,定義為void類型。自然,函數功能最後也沒有使用return語句。

但是,如果我設計成這樣,可不可以?

c語言對函數的認識(C語言自學函數說明4)2

那也就是說,我設計成需要返回一個int類型的結果值,然後通過return 0;這個0也可以随便換成其他的值,比如5 10 25 14等任意值,沒關系,那現在的意思是,這個int與return配合使用,與函數要實現的功能以及函數本身有沒有真的能解算出一個結果有絕對的關系嗎?

沒有!記住沒有!沒有!沒有!

就像上面這個一樣,改成有返回值,與原來沒有返回值的功能一樣,并沒有改變啥!

所以,一個函數要不要返回值,以及返回什麼值,其實與函數功能并沒有嚴格的對應,可以說完全是程序員自己在設定,當然,如果一個函數功能本身就可以得出一個結果值,或者确實需要一個結果值,那我們可以順坡下驢,就按照函數的要求進行設定得了,省的我們給他設定,比如

c語言對函數的認識(C語言自學函數說明4)3

函數1呢,被設定為用來判斷一個年份是不是閏年,而這個是不是閏年的結果呢,又被用到

c語言對函數的認識(C語言自學函數說明4)4

函數2的裡面繼續使用,這樣,出現了連續套用的情況,那如果人為不給函數1設計成帶回來一個返回值來表示判斷的年是閏年還是平年,那函數2裡面怎麼決定給month_day是賦值29還是28呢?這樣,為了省事,那就把函數2要設計成函數本身需要返回值的這種狀況,那就沒必要人為非要給他設計成無返回值。

所以,原則上函數要設計成什麼類型返回值,要不要設計成有返回值還是無返回值,完全是人為的,即使函數功能要返回值,但我就是把它設計成無返回值,又怕啥?對吧,反過來一樣,函數就不需要返回值,但我就把它設計成有返回值,又怕啥?沒關系的,但是,我們要順其自然,做到順應和諧,如果函數就需要一個返回值,那你就自然地給它設計成有返回值的,如果函數不要返回值,那就設計成無類型返回值得了!免得給自己找别扭,對吧!

那對應的,對函數調用的時候,本來無返回值函數調用很簡單,看前面給你講解的函數說明2的内容,那現在如果你把本來無需返回的函數設計成有了返回值類型,那按照正常的,有返回值是可以繼續參與運算的,那你這個返回值并沒有多大價值,沒必要參與其他的運算,那我調用這個函數咋辦?其實很簡單,也像無返回值一樣,直接寫函數調用部分就行,不需要搞成參與運算的形式,那個返回值也自然丢棄了,沒地兒用它!

我們沒必要固執認為不是有返回值嗎?返回這個值之後還得參加二次運算,所以,這是很靈活的,一定要理解!

其實,你再看,在函數3裡面,調用了函數2,但是正好是放在if的結構裡,你看到的調用正好就是沒有顯式參與比較的形式,如果你一定要看到函數返回值參與運算,那就寫成is_leap_year(year_2)==1或者is_leap_year(year_2)!=0這種形式,那你就理解了參與運算了,隻不過if結構裡面特殊,簡化了比較判斷運算而已!

函數的返回值情況,可以分兩種,一種是,函數功能就是要運算得出一個結果,比如,我給你三邊,函數就可以給我得出一個三角形的面積,這個面積結果就正好能對應到為函數設計的返回值。第二種,還是這個三角形,我給你三邊,但是我沒有要讓你求面積,而是問,是否可以構成一個三角形,那這個需要一個結果,可結果是啥?僅僅是一個“是”或者“不是”的邏輯結果,并沒有規定要具體得到一個什麼值,那怎麼辦?隻能人為來定了,意思是你隻要能正确表達出能構成三角形還是不能構成三角形的效果就行,那好,我說用1表示可構成,0表示不能構成,或者用字符Y表示能構成,N表示不能構成,那都是可以的,沒關系!如果你思維還沒開放,我說用8表示能構成,用5表示不能構成,可以嗎,沒關系,可以的!

那我們在設計函數的時候,到底設計成無返回值還是有返回值,那就有了參照了,你可以認為參考函數的功能需求就行,最後,你還要考慮下主調函數的需求,或者說主調函數需要用你這個被調函數返回的值,那你沒有把被調函數設計成有返回值,那你要怎麼解決這種矛盾!

2、函數的有參與無參

原則上,把函數設計成無參數,那就是說,函數本身把所有需要的都考慮了,不需要開放給主調函數給我傳值或者傳地址,也就是不需要外界幹預,那沒關系,你都解決了!省的主調函數為被調函數考慮傳什麼值了!

當然,函數設計成必須由主調函數給傳一個值或者地址才能進行運算,那就需要把部分變量開放出來,設計成有參數的形式,這兩種也是很靈活的,原則也都是人為的,你想設計成啥樣的就設計成啥樣的,當然,結合函數實際的功能需求更好!

好了,那你現在考慮考慮,是否可以把月曆函數程序修改下,我不是設計的函數2和函數3都是有參數的嘛,那你能不能修改成不要參數,以及不要返回值等,看能不能還能實現月曆打印!

但一個要求,函數必須設計成一個函數一個功能,不能再把多個功能設計在一個函數裡!

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关生活资讯推荐

热门生活资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved