函式部分在面試中的考察重點主要是幾個關鍵字的使用,如static、const,這些我們在前文中已
經有過專題,因此在這里就不再繼續贅述,主要來看一下,關於函式自身的幾個問題:
分析下面的程式,程式能否給出運行結果,如果能輸出是什麼,如果不能,原因是什麼
# include int m,n;
ps1()
ps2()
int main( void)
答案是:會給出輸出結果,輸出結果是不不確定的整數;
看到這樣的題目,可能絕大多數人的第一反應就是編譯會報錯,
因為對於第三行和第八行的函式定義是錯誤的,沒有返回值型別,所以語法上是錯誤的。
那麼這種說法對不對呢,從答案上我們可以看出來,這樣的想法是明顯不對的,
編譯並不會報錯。為什麼會這樣呢?
原因是,雖然我們習慣於使用返回值型別 + 函式名這樣的方法進行函式的宣告和定義,
標準也推薦我們這樣做,但是並不代表省略掉返回值型別就不對了,
如果省略掉返回值型別,那麼編譯器會預設返回 int型別 。
當然,這也不是一定的,最終還是取決於編譯器的不同而不同。
在本題中,首先可以確定的是,編譯不會報錯,省略了函式返回值型別的宣告,
編譯器預設返回 int 型別,但是函式中卻沒有 return 語句,所以返回的將會是不確定的整數。
當然,如果你在函式的定義中,新增了了 void 這樣的返回值型別說明,
編譯器就一定會報錯了,所以推薦在程式設計的過程中,不管是否有返回值,也一定要寫返回值型別的宣告。
C語言面試題 函式(二)
c語言面試題 函式 二 c語言中,跟函式相關的考題,偶爾還會出現與變長引數相關的問題。在c語言程式設計中有時會遇到一些引數個數可變的函式,如 printf scanf 函式,檢視man手冊時其函式原型為 int printf const char format,int scanf const cha...
C語言面試題
基礎篇 1 區域性變數能否和全域性變數重名?可以2 如何引用乙個已經定義過的全域性變數?直接呼叫並初始化 3 全域性變數可不可以定義在可被多個.c檔案包含的標頭檔案中?為什麼?可以,6 堆和棧有什麼區別?7 什麼是預編譯,何時需要預編譯 8 c和c 中的struct有什麼不同?9 memset me...
C語言面試題
1.求某一年的某一天 includestruct sdate int main int i 0,nday dt.nday while i2 nday printf 這是 d年的第 d天 n dt.nyear,dt.nday return 0 將列印和演算法抽象成不同函式 includestruct ...