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基礎を勉強しています.もし間違っているところがあれば、一緒に討論することを歓迎します.