日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

C语言全局变量和局部变量深入

發布時間:2025/3/12 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言全局变量和局部变量深入 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

局部變量

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

示例

int f1(int a){int b,c; //a,b,c僅在函數f1()內有效return a+b+c; } int main(){int m,n; //m,n僅在函數main()內有效return 0; }
解說:

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

2 . 形參變量、在函數體內定義的變量都是局部變量。實參給形參傳值的過程也就是給局部變量賦值的過程。

3 . 可以在不同的函數中使用相同的變量名,它們表示不同的數據,分配不同的內存,互不干擾,也不會發生混淆。

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

全局變量

在所有函數外部定義的變量稱為全局變量(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 都是在函數外部定義的全局變量。C語言代碼是從前往后依次執行的,由于 x、y 定義在函數 func1() 之后,所以在 func1() 內無效;而 a、b 定義在源程序的開頭,所以在 func1()、func2() 和 main() 內都有效。

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

示例1 輸出變量的值:

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

運行結果:

func1 n: 20 func2 n: 30 func3 n: 10 block n: 40 main n: 30

解說

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

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

當全局變量和局部變量同名時,在局部范圍內全局變量被“屏蔽”,不再起作用。或者說,變量的使用遵循就近原則,如果在當前作用域中存在同名變量,就不會向更大的作用域中去尋找變量。

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

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

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

示例2 根據長方體的長寬高求它的體積以及三個面的面積。

#include <stdio.h>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\n", v, s1, s2, s3);return 0; }

運行結果:

Input length, width and height: 10 20 30↙ v=6000, s1=200, s2=600, s3=300

解說

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

掃一掃獲取更多精彩內容喲!!!

總結

以上是生活随笔為你收集整理的C语言全局变量和局部变量深入的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。