zoukankan      html  css  js  c++  java
  • 作用域

    
    
    //变量的定义,赋值,初始化的区别:
    #include <stdio.h>
    main(){
    int a;//此为变量的定义
    a = 3;//此为变量的赋值
    int b=3;//此为通常说的变量的定义并初始化
    int c;
    printf ("%d",c);//事实上,如果变量在定义的时候没有初始化,一般情况下变量会被c编译器自动初始化为0
    }

    2.作用域:

    //1
    #include <stdio.h>
    void b(int c,int d){
    int c;
    int d=3;
    printf ("%d %d",c,d);
    }
    void main(void){
    b(4,5);
    }
    /*以上代码,函数体内的c和d均是语法错误,
    报错原因都是重复定义。
    我们在定义函数的时候,括号内的形参已经被
    定义为函数b的局部变量了,就不能在函数体内的最外层再次定义了*/
    
    /*下面是正确的写法*/
    #include <stdio.h>
    void b(int c,int d){
    d=3;
    printf ("%d %d",c,d);
    }
    void main(void){
    b(4,5);//将打印4,3
    }

     3.

    #include <stdio.h>
    
    void main (void){
    int a;
    float a;//报错,变量a类型冲突,不同于Python,一旦变量a类型定义了就不能更改
    }

     4 定义在程序文件最外层的声明以及定义:

    /*在程序文件最外层,如果是形如 int a;或者 static int b;这就是声明
    声明的目的就是来声明变量
    到底是全局变量还是被static修饰的静态变量,
    int a;这样的形式,则声明int变量a为全局变量
    static int b;这样的形式,则声明int变量b为静态变量,static表示任何其他程序文件都无法获取到这个变量在源程序文件中的值,同时对该变量的更改也将不影响原程序文件
    同一声明在程序文件中可以出现多次,即 int a; int a; int a;//这样是没有语法错误的。 但是,像以下这样的代码 int a; static int a;//这就报错了,第一句话已经说明int a是全局变量,而第二句话又说是static变量,显然前后矛盾了 而在程序文件最外层,形如这样的 int a=2;或者static int b = 3, 这就是声明并定义了,因为变量不能重复定义,所以以下代码会报错: static int a = 2; static int a = 3; 同一声明可以出现多次,所以,以下代码是合法的: static int a; static int a=2; 声明前后矛盾同样会报错,所以以下也是非法的: int a; static int a =3;//
    */ #include <stdio.h> int a; int a;//合法 int b; static int b;//非法int d=3; int d = 3;//非法 int f; int f=2;//合法 void func1(void); static void func2(void); void main(void){ int i; int i;//报错,这里要特别注意了,不同于原文件最外层,这样的形式在函数体内都是定义,这里显然重复定义了 } static void func1(void){ printf ("func1"); } //报错,前面已经声明了func1是全局函数,这里定义 //的时候却说是static函数,这就矛盾了 void func2(void){ printf ("func2"); }//不报错,func2仍然是static函数,注意如果换成变量的话就会报错
  • 相关阅读:
    1105 Spiral Matrix (25分)(蛇形填数)
    1104 Sum of Number Segments (20分)(long double)
    1026 Table Tennis (30分)(模拟)
    1091 Acute Stroke (30分)(bfs,连通块个数统计)
    1095 Cars on Campus (30分)(排序)
    1098 Insertion or Heap Sort (25分)(堆排序和插入排序)
    堆以及堆排序详解
    1089 Insert or Merge (25分)
    1088 Rational Arithmetic (20分)(模拟)
    1086 Tree Traversals Again (25分)(树的重构与遍历)
  • 原文地址:https://www.cnblogs.com/saolv/p/9609734.html
Copyright © 2011-2022 走看看