######使える。 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 言語では、同じ名前の 2 つの変数を同じスコープ内に出現させることはできないと規定されており、そうしないと名前の競合が発生します。ただし、同じ名前の変数は異なるスコープ内に出現することが許可されており、それらのスコープは異なります。そして互いに衝突しません。この文には 2 つの意味があります:
同じ名前の変数は異なる関数内に出現でき、異なる関数は異なるローカル スコープを持ちます;
変数同じ名前の関数は関数の内側と外側に出現できます。ローカル スコープは関数の内側にあり、グローバル スコープは関数の外側にあります。
1) 異なる関数内の同じ名前の変数は完全に独立した 2 つの変数であり、相互に相関や影響はありません。
#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 に影響を与えないことを示しています。この 2 つの 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 中国語 Web サイトの他の関連記事を参照してください。