c言語変数の役割ドメイン問題
7813 ワード
c言語における変数作用ドメインのまとめ
どんな言語でもmainはいつもプログラムの入り口のようで、括弧はその内容です.変数の役割ドメインはいつも私たちを悩ませています.次に、c言語の変数役割ドメインを逐次漸進的に理解します.まず、cは弱いタイプの言語であり、弱いタイプは多くの面で表現されています.
1:プログラムに定数を直接書いて、セミコロン:1を書くことができます.
2:関数を定義する場合、void型の関数はreturnできます.int型は書き込みなしで値を返すことができます.
...まだたくさんある
まずmainで定義した変数はもちろんmain関数全体に作用します
1:mainで変数を定義する
1 #include<stdio.h>
2 int main()
3 {
4
5 int a=0;
6 printf(“%d
”,a);
7 return 0;
8 }
2:1つの構造体、すなわち括弧で定義する場合(後の#include
int main()
{
int a=0;
//
{
// , a;
//printf(“%d
”,a);
// a , a, a
int a = 1;// a , ,a , a;
printf(“%d
”,a);// 1
}
printf(“%d
”,a);// 0
return 0;
}
3:構造体は複数のネストが可能で、複数のネストの場合:
int main()
{
int a = 0;
//
{
printf(“%d
”,a);// 0
int a = 1,b=10;
printf(“%d
”,a);// 1
//
{
printf(“%d
”,a);// 1
int a = 2;
printf(“%d
”,a);// 2
}
}
printf(“%d
”,a);// 0
//printf(“%d
”,b);// ,b
}
まとめ:多層構造体がネストされている場合、最内層は外層にアクセスできますが、外層は内層にアクセスできません.
4:3の例をまとめることで、すべての変数の役割ドメインを説明できるようになりましたが、知識の勉強が進むにつれて、また新しい疑問が出てきました
1 int main()
2 {
3 // for , ,
4 for (int a=0; a<3; a++)
5 int b = 0;// , ,
6
7 return 0;
8 }
これは実は比較的によく理解して、もし括弧を大きくしなければ、表面的にbはmainのグローバルに属して、1対のmain関数の括弧しかないため、しかしfor循環にとって、またこれを望みます
bループが終了すると解放され、矛盾するので、コンパイラはforループ体で変数を定義する際にカッコで定義するように強制する.同様にcase文で定義された変数もあります.
forまたはcaseを使用する場合、文が1つでもカッコを付ける.
5:forループの他の場合、関数(メソッド)定義時の変数の役割ドメインを比較
int main()
{
for(int a=0; a<3; a++,b++)// b ,b ,
{
printf(“%d
”,a);// 0、1、2, b++
int a = 10;// a , a , a, 1、2
int b = 0;
printf(“%d
”,a);// 10
}
return 0;
}
上の例からforサイクルにおける局所変数aは、サイクルにおいて重名変数を定義することができるが、サイクルが終了するたびに、サイクルにおけるaが解放される
ただし、関数を定義する場合、パラメータは関数体で重複変数を定義できません.
int test(int num1, int num2)
{
int num1 = 0;// , for , , , ,c , for a , , , ,a , , ;
return 0;
}
以上はすべて個人の理解で、自分もc基礎を勉強しています.もし間違っているところがあれば、一緒に討論することを歓迎します.