作用域
//变量的定义,赋值,初始化的区别: #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函数,注意如果换成变量的话就会报错