可以使用。 C語言在函數中所說明的變數為局部變量,僅在函數內作用,不會影響其他函數。在不同函數中使用相同的變數名不代表是同一變數。
本教學操作環境:windows7系統、c99版本、Dell G3電腦。
在不同函數中可以使用相同名字的變數。
教學推薦:《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) 在語句區塊中也可定義變量,它的作用域只限於目前語句區塊。
關於變數的命名
每一段可運行的C語言程式碼都包含了多個作用域,即使最簡單的C語言程式碼也是如此。
int main(){ return 0; }
這就是最簡單的、可運行的C語言程式碼,它包含了兩個作用域,一個是main() 函數內部的局部作用域,一個是main() 函數外部的全域作用域。
C語言規定,在同一個作用域中不能出現兩個名字相同的變量,否則會產生命名衝突;但是在不同的作用域中,允許出現名字相同的變量,它們的作用範圍不同,彼此之間不會產生衝突。這句話有兩層意義:
不同函數內部可以出現同名的變量,不同函數是不同的局部作用域;
函數內部和外部可以出現同名的變量,函數內部是局部作用域,函數外部是全域作用域。
1) 不同函數內部的同名變數是兩個完全獨立的變量,它們之間沒有任何關聯,也不會相互影響。
#include <stdio.h> void func_a(){ int n = 100; printf("func_a: n = %d\n", n); n = 86; printf("func_a: n = %d\n", n); } void func_b(){ int n = 29; printf("func_b: n = %d\n", n); func_a(); //调用func_a() printf("func_b: n = %d\n", n); } int main(){ func_b(); return 0; }
運行結果:
func_b: n = 29 func_a: n = 100 func_a: n = 86 func_b: n = 29
func_a() 和func_b() 內部都定義了一個變數n,在func_b() 中,n 的初始值為29,呼叫func_a() 後,n 值還是29,這說明func_b() 內部的n 並沒有影響func_a() 內部的n。這兩個 n 是完全不同的變量,彼此之間根本“不認識”,只是起了個相同的名字而已,這就好像明星撞衫,北京和雲南都有叫李紅的,趕巧了而已。
2) 函數內部的局部變數和函數外部的全域變數同名時,在當前函數這個局部作用域中,全域變數會被“屏蔽”,不再起作用。也就是說,在函數內部使用的是局部變量,而不是全域變數。
變數的使用遵循就近原則,如果在當前的局部作用域中找到了同名變量,就不會再去更大的全域作用域中尋找。另外,只能從小的作用域往大的作用域去尋找變量,而不能反過來,使用較小的作用域中的變數。
下面我們透過一個具體的例子來說明:
#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(); printf("main n: %d\n", n); return 0; }
運行結果:
func1 n: 20 func2 n: 30 func3 n: 10 main n: 30
程式碼中雖然定義了多個同名變數n,但它們的作用域不同,所有不會產生命名衝突。
以下是輸出結果的分析:
對於 func1(),輸出結果為 20,顯然使用的是 func1() 內部的 n,而不是外部的 n。
呼叫 func2() 時,會把 main() 中的實參 n 傳給 func2() 中的形參 n,此時形參 n 的值變成 30。形參 n 也是局部變量,所以就使用它了。
func3() 輸出 10,使用的是全域變量,因為在 func3() 中不存在局部變數 n,所以編譯器只能到函數外部,也就是全域作用域去尋找變數 n。
main() 中 printf() 語句輸出 30,表示使用的是 main() 中的 n,而不是外部的 n。
更多程式相關知識,請造訪:程式設計教學! !
以上是在不同函數中可以使用相同名字的變數嗎的詳細內容。更多資訊請關注PHP中文網其他相關文章!