隨筆-159  評(píng)論-114  文章-7  trackbacks-0

          局部變量,塊內(nèi)的變量(函數(shù)為最大的塊)

          全局變量在所有函數(shù)之外(函數(shù)都可用)

          內(nèi)存:

             代碼區(qū)      數(shù)據(jù)區(qū)

             棧為局部變量
             堆區(qū)為動(dòng)態(tài)分配
             全局?jǐn)?shù)據(jù)區(qū),靜態(tài)數(shù)據(jù)區(qū)
             常量區(qū),主要是字面量,內(nèi)存為只讀的。

          函數(shù)的形參,可以給默認(rèn)值

          可以為形參指定默認(rèn)值(從右向左),調(diào)用時(shí)可以不用傳遞參數(shù)。

          fact(int n,int m = 1);

          但是不能跳躍傳遞參數(shù),二義性!

          enum Sex{
            MALE,FEMALE
          }

          void disp(char* name, Sex gender = MALE);

          函數(shù)聲明中指定了默認(rèn)值,不能在定義時(shí),再指定默認(rèn)值,但可以追加默認(rèn)值。

          fact(int , int  =1);  這樣聲明沒(méi)問(wèn)題。

          內(nèi)聯(lián)函數(shù),提高程序運(yùn)行效率,調(diào)用函數(shù)時(shí),不是調(diào)用,而是搬一份到調(diào)用處,不用進(jìn)行真正函數(shù)調(diào)用,所以無(wú)開(kāi)辟棧的開(kāi)銷。

          會(huì)增加代碼的長(zhǎng)度

          如果函數(shù)很復(fù)雜,不能成為內(nèi)聯(lián)函數(shù)。不支持控制結(jié)果。

          規(guī)定1,必須先定義,不支持函數(shù)原形。
          因?yàn)榘岷瘮?shù)代碼時(shí),是在編譯過(guò)程中進(jìn)行的。

          比較  調(diào)用開(kāi)銷 VS 執(zhí)行開(kāi)銷,來(lái)判斷是否使用內(nèi)聯(lián)函數(shù),對(duì)于很簡(jiǎn)單的函數(shù)值得內(nèi)聯(lián)。

          2.是否能成為內(nèi)聯(lián)函數(shù)完全有編譯程序決定

          3.不支持控制結(jié)構(gòu)。

          #include <iostream>
          using namespace std;
          inline 
          int isnumber(char ch)
          {
                 
          return ((ch >= '0' && ch <='9')? 1:0);       
          }
           

          int main()
          {
              
          char in
              
          while(true)
                  cout 
          << "please input a char:(input q to exit) >";
                  
          in = cin.get();
                  
          if(isnumber(in))
                  
          {
                        cout 
          << "you input is num " << in - '0' << endl;                 
                  }

                  
          else
                  
          {
                        
          if(in == 'q')
                              
          break
                        cout 
          << "you input is not num " << endl;     
                  }
           
                  cin.ignore(
          100,'\n'); 
              }
           
              cout 
          << "please input any key to exit" << endl; 
              cin.
          get(); 
              cin.
          get(); 
              
          return 0;    
          }

           

          遞歸函數(shù)

          一個(gè)函數(shù)自己調(diào)用自己,不管問(wèn)題多復(fù)雜,只要把問(wèn)題簡(jiǎn)化為最簡(jiǎn)單的形式。

          遞歸函數(shù)不可能是內(nèi)聯(lián)函數(shù)

          效率,遞歸 < 循環(huán) < 公式

          任何遞歸都可以改為非遞歸,需要用到棧,代碼就很看懂了。改后,不一定提高效率。因?yàn)檫f歸本身就是去開(kāi)辟棧完成的。為何不保留代碼可讀性呢。

          唯一條件,遞歸必須存在一個(gè)必須滿足的條件,以結(jié)束推出。

          菲波那契數(shù)列,求對(duì)應(yīng)位置的值

          頭文件

          #ifndef FIB_H
          #define FIB_H 
          double fib( int );
          double fi( int );
          #endif

          函數(shù)定義文件,遞歸

          double fib( int n )
          {
              
          if( n<1 )
                  
          return 0;
              
          if( n<3 )
                  
          return 1;
              
          return fib( n-1 ) + fib( n-2 );
          }


          double fi( int n )
          {
              
          if( n<1 )
                  
          return 0;
              
          if( n<3 )
                  
          return 1;
              
          double d,d1,d2;
              d1
          =1;
              d2
          =1;
              
          forint i=3;i<=n;i++ ){
                  d
          =d1+d2;
                  d1
          =d2;
                  d2
          =d;
              }

              
          return d;
          }


          主函數(shù)文件

          #include <iostream>
          using namespace std;
          #include 
          "fib.h"

          int main()
          {
              cout
          <<"please input item no.:";
              
          int n;
              cin
          >>n;
              cout
          <<"item "<<n<<" is "<<fi(n)<<endl;
              
          return 0;
          }





          主站蜘蛛池模板: 高陵县| 湘潭县| 泰来县| 新密市| 濮阳县| 通渭县| 陆川县| 明溪县| 芦山县| 专栏| 玉屏| 昌平区| 久治县| 三门峡市| 治县。| 宜昌市| 贵州省| 枣阳市| 永泰县| 中西区| 合阳县| 宜昌市| 玉田县| 乌鲁木齐市| 阿尔山市| 纳雍县| 临武县| 乌兰县| 习水县| 徐汇区| 泸定县| 和平区| 青龙| 克山县| 淮南市| 南华县| 府谷县| 深水埗区| 武强县| 清徐县| 晋中市|