11.11C語言----函數

今天C語言的學習小結
 第一.函數這章當中4.4作用域規則。
首先我們可以懷着這幾個問題去看,*1如何進行聲明才能確保變量在編譯時被正確聲明?*2如何安排聲明的位置才能確保程序在加載時各部分能正確連接?*3如何組織程序中的聲明才能確保只有一個副本?*4如何聲明外部變量?
   好了,我開始總結一下今天學的幾個點:
第一.名字的作用域指的是程序中可以使用該名字的部分。對於在函數開頭生命的自動變量來說,其作用域是聲明該變量名的函數。外部變量或者函數的作用域從聲明他的地方開始,到其所在的文件的末尾結束。還有,另一方面,如果要在外部變量的定義之前使用該變量,或者外部變量的定義與變量的使用不在同一個源文件中,則必須在相應的變量聲明中強制性的使用關鍵字extern。另外也沒什麼了 我覺得這小節當中搞明白剛開始的那幾點問題再仔細看看例子就好了。對了還有一點就是外部變量的聲明與定義嚴格區分是非常重要的。變量聲明用於說明變量的屬性(及變量類型),而變量的定義除了此之外還將引起存儲的分配。記住咯。。。。。


第二.函數這章中4.5頭文件。

關於這點我覺得沒有太多的邏輯性要說的,主要說的就是考慮到庫的問題,就是說把各個源文件單獨存放到不同的文件中,在實際的程序中,它們分別來自於單獨編譯的庫。當然我想說的是,這對於後期程序的維護是非常重要的,因爲對於出現問題的模塊,我們很容易就通過頭文件很有組織的找到問題。

第三。函數中4.6靜態變量,4.7寄存器變量的問題
1.通過static限定外部對象,可以達到隱藏對外部對象的目的。比如,getch-ungetch複合結構需要共享buf與bufp兩個變量,這樣子buf與bufp必須是外部變量,但這兩個對象不應該被getch與ungetch函數的調用者所訪問。還有,要將對象指定爲靜態存儲,可以在正常的對象聲明之前加上關鍵字static作爲前綴。
2.register聲明告訴編譯器,它所聲明的變量在程序過程中使用頻率較高。其思想是,將register變量放在機器的寄存器中,這樣子可以使程序更小,執行速度更快。還有一點是無論寄存器變量實際上是不是存放在寄存器中,他的地址都是不能訪問的!


第四。程序塊結構,關於這一點,哈哈 我想說,就是風格的問題,一個比較完美簡潔的程序,必須嚴格程序模塊化!在函數中可以以程序塊結構的形式定義變量。


第五。初始化

  在不進行顯示初始化的情況下,外部變量和靜態變量都將被初始化爲0,而自動變量和寄存器變量的初值則沒有定義。


第六。遞歸

   遞歸定義:函數或者過程直接或者間接地調用自身;
寫遞歸首先考慮:
 1、遞歸出口;(往往是情況最簡單的結束條件,相當於
人的理想)
 2、有條件地降階;(把複雜的問題向着出口去逼)
下面是一個做練習的例子:求N個數中的最大數
#define n 8//宏定義
int a[n];//全局變量
int max(int n)//個數遞 歸
{
     if(n==1)

  return a[n-1];//遞歸出口,只有一個數

  else  if(max(n-1)>a[n-1])
  return a[n-1];
  else return  max(n-1);
}
嘻嘻~~~ 還有個很好玩的例子說遞歸的就是:從前有座山,山裏有個廟,廟裏有個老和尚對小和尚講,從前有座山,山裏有個廟,廟裏有個老和尚對小。。。。
  好了,以上就是今天所學的一點點小結!明天繼續加油哈。。。。。。。。。。。。。。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章