天天看點

C語言面試題大彙總之華為面試題

1、局部變量能否和全局變量重名?

  答:能,局部會屏蔽全局。要用全局變量,需要使用"::"

  局部變量可以與全局變量同名,在函數内引用這個變量時,會用到同名的局部變量,而不會用到全局變量。對于有些編譯器而言,在同一個函數内可以定義多個同名的局部變量,比如在兩個循環體内都定義一個同名的局部變量,而那個局部變量的作用域就在那個循環體内。

  2、如何引用一個已經定義過的全局變量?

  答:extern

  可以用引用頭檔案的方式,也可以用extern關鍵字,如果用引用頭檔案方式來引用某個在頭檔案中聲明的全局變理,假定你将那個變寫錯了,那麼在編譯期間會報錯,如果你用extern方式引用時,假定你犯了同樣的錯誤,那麼在編譯期間不會報錯,而在連接配接期間報錯。

  3、全局變量可不可以定義在可被多個.c檔案包含的頭檔案中?為什麼?

  答:可以,在不同的c檔案中以static形式來聲明同名全局變量。

  可以在不同的c檔案中聲明同名的全局變量,前提是其中隻能有一個c檔案中對此變量賦初值,此時連接配接不會出錯

  4、語句for( ;1 ;)有什麼問題?它是什麼意思?

  答:和while(1)相同。

  5、do……while和while……do有什麼差別?

  答:前一個循環一遍再判斷,後一個判斷以後再循環

  6、請寫出下列代碼的輸出内容 

  7、static全局變量與普通的全局變量有什麼差別?static局部變量和普通局部變量有什麼差別?static函數與普通函數有什麼差別?

  全局變量(外部變量)的說明之前再冠以static 就構成了靜态的全局變量。全局變量本身就是靜态存儲方式, 靜态全局變量當然也是靜态存儲方式。 這兩者在存儲方式上并無不同。這兩者的差別雖在于非靜态全局變量的作用域是整個源程式, 當一個源程式由多個源檔案組成時,非靜态的全局變量在各個源檔案中都是有效的。 而靜态全局變量則限制了其作用域, 即隻在定義該變量的源檔案内有效, 在同一源程式的其它源檔案中不能使用它。由于靜态全局變量的作用域局限于一個源檔案内,隻能為該源檔案内的函數公用, 是以可以避免在其它源檔案中引起錯誤。

  從以上分析可以看出, 把局部變量改變為靜态變量後是改變了它的存儲方式即改變了它的生存期。把全局變量改變為靜态變量後是改變了它的作用域, 限制了它的使用範圍。

  static函數與普通函數作用域不同。僅在本檔案。隻在目前源檔案中使用的函數應該說明為内部函數(static),内部函數應該在目前源檔案中說明和定義。對于可在目前源檔案以外使用的函數,應該在一個頭檔案中說明,要使用這些函數的源檔案要包含這個頭檔案

  static全局變量與普通的全局變量有什麼差別:static全局變量隻初使化一次,防止在其他檔案單元中被引用;

  static局部變量和普通局部變量有什麼差別:static局部變量隻被初始化一次,下一次依據上一次結果值;

  static函數與普通函數有什麼差別:static函數在記憶體中隻有一份,普通函數在每個被調用中維持一份拷貝

  8、程式的局部變量存在于(堆棧)中,全局變量存在于(靜态區 )中,動态申請資料存在于( 堆)中。

  9、設有以下說明和定義:

  typedef union {long i; int k[5]; char c;} date;

  struct data { int cat; date cow; double dog;} too;

  date max;

  則語句 printf("%d",sizeof(struct date)+sizeof(max));的執行結果是:___52____

  答:date是一個union, 變量公用空間. 裡面最大的變量類型是int[5], 占用20個位元組. 是以它的大小是20

data是一個struct, 每個變量分開占用空間. 依次為int4 + date20 + double8 = 32.

是以結果是 20 + 32 = 52.

  當然...在某些16位編輯器下, int可能是2位元組,那麼結果是 int2 + date10 + double8 = 20

  10、隊列和棧有什麼差別?

  

  隊列先進先出,棧後進先出

  11、寫出下列代碼的輸出内容

  答:110

繼續閱讀