亚洲精品中文字幕无乱码_久久亚洲精品无码AV大片_最新国产免费Av网址_国产精品3级片

C語言 百分網(wǎng)手機站

C語言局部變量和全局變量

時間:2020-10-05 12:02:32 C語言 我要投稿

C語言局部變量和全局變量

  C語言允許直接訪問物理地址,可以直接對硬件進行操作。那么大家知道C語言局部變量和全局變量是什么呢?下面一起來看看!

  形參變量要等到函數(shù)被調(diào)用時才分配內(nèi)存,調(diào)用結(jié)束后立即釋放內(nèi)存。這說明形參變量的作用域非常有限,只能在函數(shù)內(nèi)部使用,離開該函數(shù)就無效了。所謂作用域(Scope),就是變量的有效范圍。

  不僅對于形參變量,C語言中所有的變量都有自己的作用域。決定變量作用域的是變量的定義位置。

  局部變量

  定義在函數(shù)內(nèi)部的變量稱為局部變量(Local Variable),它的作用域僅限于函數(shù)內(nèi)部, 離開該函數(shù)后就是無效的,再使用就會報錯。例如:

  int f1(int a){ int b,c; //a,b,c僅在函數(shù)f1()內(nèi)有效 return a+b+c;}int main(){ int m,n; //m,n僅在函數(shù)main()內(nèi)有效 return 0;}

  幾點說明:

  1) 在 main 函數(shù)中定義的變量也是局部變量,只能在 main 函數(shù)中使用;同時,main 函數(shù)中也不能使用其它函數(shù)中定義的變量。main 函數(shù)也是一個函數(shù),與其它函數(shù)地位平等。

  2) 形參變量、在函數(shù)體內(nèi)定義的變量都是局部變量。實參給形參傳值的過程也就是給局部變量賦值的過程。

  3) 可以在不同的函數(shù)中使用相同的變量名,它們表示不同的數(shù)據(jù),分配不同的內(nèi)存,互不干擾,也不會發(fā)生混淆。

  4) 在語句塊中也可定義變量,它的作用域只限于當前語句塊。

  全局變量

  在所有函數(shù)外部定義的變量稱為全局變量(Global Variable),它的作用域默認是整個程序,也就是所有的源文件,包括 .c 和 .h 文件。例如:

  int a, b; //全局變量void func1(){ //TODO:}float x,y; //全局變量int func2(){ //TODO:}int main(){ //TODO: return 0;}

  a、b、x、y 都是在函數(shù)外部定義的全局變量。C語言代碼是從前往后依次執(zhí)行的,由于 x、y 定義在函數(shù) func1() 之后,所以在 func1() 內(nèi)無效;而 a、b 定義在源程序的開頭,所以在 func1()、func2() 和 main() 內(nèi)都有效。

  局部變量和全局變量的綜合示例

  【示例1】輸出變量的值:

  #include int n = 10; //全局變量void func1(){ int n = 20; //局部變量 printf("func1 n: %d ", n);}void func2(int n){ printf("func2 n: %d ", n);}void func3(){ printf("func3 n: %d ", n);}int main(){ int n = 30; //局部變量 func1(); func2(n); func3(); //代碼塊由{}包圍 { int n = 40; //局部變量 printf("block n: %d ", n); } printf("main n: %d ", n); return 0;}

  運行結(jié)果:

  func1 n: 20

  func2 n: 30

  func3 n: 10

  block n: 40

  main n: 30

  代碼中雖然定義了多個同名變量 n,但它們的作用域不同,在內(nèi)存中的位置(地址)也不同,所以是相互獨立的變量,互不影響,不會產(chǎn)生重復(fù)定義(Redefinition)錯誤。

  1) 對于 func1(),輸出結(jié)果為 20,顯然使用的是函數(shù)內(nèi)部的. n,而不是外部的 n;func2() 也是相同的情況。

  當全局變量和局部變量同名時,在局部范圍內(nèi)全局變量被“屏蔽”,不再起作用;蛘哒f,變量的使用遵循就近原則,如果在當前作用域中存在同名變量,就不會向更大的作用域中去尋找變量。

  2) func3() 輸出 10,使用的是全局變量,因為在 func3() 函數(shù)中不存在局部變量 n,所以編譯器只能到函數(shù)外部,也就是全局作用域中去尋找變量 n。

  3) 由{ }包圍的代碼塊也擁有獨立的作用域,printf() 使用它自己內(nèi)部的變量 n,輸出 40。

  3) C語言規(guī)定,只能從小的作用域向大的作用域中去尋找變量,而不能反過來,使用更小的作用域中的變量。對于 main() 函數(shù),即使代碼塊中的 n 離輸出語句更近,但它仍然會使用 main() 函數(shù)開頭定義的 n,所以輸出結(jié)果是 30。

  【示例2】根據(jù)長方體的長寬高求它的體積以及三個面的面積。

  #include 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;}int main(){ int v, length, width, height; printf("Input length, width and height: "); scanf("%d %d %d", &length, &width, &height); v = vs(length, width, height); printf("v=%d, s1=%d, s2=%d, s3=%d ", v, s1, s2, s3); return 0;}

  運行結(jié)果:

  Input length, width and height: 10 20 30↙

  v=6000, s1=200, s2=600, s3=300

  根據(jù)題意,我們希望借助一個函數(shù)得到三個值:體積 v 以及三個面的面積 s1、s2、s3。遺憾的是,C語言中的函數(shù)只能有一個返回值,我們只能將其中的一份數(shù)據(jù),也就是體積 v 放到返回值中,而將面積 s1、s2、s3 設(shè)置為全局變量。全局變量的作用域是整個程序,在函數(shù) vs() 中修改 s1、s2、s3 的值,能夠影響到包括 main() 在內(nèi)的其它函數(shù)。

【C語言局部變量和全局變量】相關(guān)文章:

淺談c語言和c++和VB的區(qū)別11-24

C語言的BYTE和char字符12-19

C語言程序的錯誤和警告12-18

C語言的strcpy()和strncpy()函數(shù)11-21

c語言引用類型和值類型11-04

C語言double和float 實例分析用法11-22

C語言中的指針和內(nèi)存泄漏12-13

C語言指針函數(shù)和函數(shù)指針詳解06-10

C語言字符數(shù)組和字符串12-02