<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                # 8.C語言局部變量和全局變量 在討論函數的形參變量時曾經提到,形參變量只在被調用期間才分配內存單元,調用結束立即釋放。這一點表明形參變量只有在函數內才是有效的,離開該函數就不能再使用了。這種變量有效性的范圍稱變量的作用域。不僅對于形參變量,C語言中所有的量都有自己的作用域。變量說明的方式不同,其作用域也不同。 C語言中的變量,按作用域范圍可分為兩種,即局部變量和全局變量。 ## 局部變量 局部變量也稱為內部變量。局部變量是在函數內作定義說明的。其作用域僅限于函數內, 離開該函數后再使用這種變量是非法的。例如: ~~~ int f1(int a){ int b,c; /* a,b,c僅在函數f1()內有效 */ } int f2(int x){ int y,z; /* x,y,z僅在函數f2()內有效 */ } main(){ int m,n; /* m,n僅在函數main()內有效 */ } ~~~ 在函數f1內定義了三個變量,a為形參,b、c為一般變量。在 f1的范圍內a、b、c有效,或者說a、b、c變量的作用域限于f1內。同理,x、y、z的作用域限于f2內。m、n的作用域限于main函數內。 關于局部變量的作用域還要說明以下幾點: * 主函數中定義的變量也只能在主函數中使用,不能在其它函數中使用。同時,主函數中也不能使用其它函數中定義的變量。因為主函數也是一個函數,它與其它函數是平行關系。這一點是與其它語言不同的,應予以注意。 * 形參變量是屬于被調函數的局部變量,實參變量是屬于主調函數的局部變量。 * 允許在不同的函數中使用相同的變量名,它們代表不同的對象,分配不同的單元,互不干擾,也不會發生混淆。如在前例中,形參和實參的變量名都為n,是完全允許的。 * 在復合語句中也可定義變量,其作用域只在復合語句范圍內。例如: ~~~ main(){ int s,a; /* …… */ { int b; s=a+b; /* ……*/ /*b作用域*/ } /* …… */ /*s,a作用域*/ } ~~~ 【例8-12】 ~~~ main(){ int i=2, j=3, k; k=i+j; { int k=8; printf("%d\n",k); } printf("%d\n",k); } ~~~ 本程序在main中定義了i、j、k三個變量,其中k未賦初值。而在復合語句內又定義了一個變量k,并賦初值為8。應該注意這兩個k不是同一個變量。在復合語句外由main定義的k起作用,而在復合語句內則由在復合語句內定義的k起作用。因此程序第3行的k為main所定義,其值應為5。第6行輸出k值,該行在復合語句內,由復合語句內定義的k起作用,其初值為8,故輸出值為8,第8行輸出i,k值。i是在整個程序中有效的,第6行對i賦值為3,故以輸出也為3。而第8行已在復合語句之外,輸出的k應為main所定義的k,此k值由第3 行已獲得為5,故輸出也為5。 ## 全局變量 全局變量也稱為外部變量,它是在函數外部定義的變量。它不屬于哪一個函數,它屬于一個源程序文件。其作用域是整個源程序。 在函數中使用全局變量,一般應作全局變量說明。只有在函數內經過說明的全局變量才能使用。全局變量的說明符為extern。但在一個函數之前定義的全局變量,在該函數內使用可不再加以說明。例如: ~~~ int a,b; /* 外部變量 */ void f1(){ /* 函數f1 */ /* …… */ } float x,y; /* 外部變量 */ int fz(){ /* 函數fz */ /* …… */ } main(){ /* 主函數 */ /* …… */ } ~~~ 從上例可以看出a、b、x、y 都是在函數外部定義的外部變量,都是全局變量。但x、y 定義在函數f1之后,而在f1內又無對x、y的說明,所以它們在f1內無效。a、b定義在源程序最前面,因此在f1、f2及main內不加說明也可使用。 【例8-13】輸入正方體的長寬高l、w、h。求體積及三個面x*y、x*z、y*z的面積。 ~~~ int s1,s2,s3; int vs( int a,int b,int c){ int v; v=a*b*c; s1=a*b; s2=b*c; s3=a*c; return v; } main(){ int v,l,w,h; printf("\ninput length,width and height\n"); scanf("%d%d%d",&l,&w,&h); v=vs(l,w,h); printf("\nv=%d,s1=%d,s2=%d,s3=%d\n",v,s1,s2,s3); } ~~~ 【例8-14】外部變量與局部變量同名。 ~~~ int a=3, b=5; /* a,b為外部變量 */ max(int a,int b){ /* a,b為外部變量 */ int c; c=a>b ? a : b; return(c); } main(){ int a=8; printf("%d\n",max(a,b)); } ~~~ 如果同一個源文件中,外部變量與局部變量同名,則在局部變量的作用范圍內,外部變量被“屏蔽”,即它不起作用。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看