变量的初始化

变量的初始化分为显式初始化和默认初始化,显式初始化就是定义时给变量赋一个值,默认初始化就是在函数外定义时不给变量赋值,编译器自动赋初值。

显式初始化:int i=10;

变量的定义

变量的定义(int i; 当然定义的同时也可以赋值)的同时要为变量申请存储空间,变量的定义只能定义一次,且全局变量的定义只能出现在一个文件中,绝对不能重复定义。

1 #include<iostream>
2 using namespace std;
3 int i;
4 int main()
5 {
6     return 0;
7 }
1 #include<iostream>
2 using namespace std;
3 int i = 0;

例如我在pr.cpp文件中定义了一个变量而在pr1.ccp文件中定义了相同的变量就会报以下错误:(原因是都定义了全局变量i)

1 #include<iostream>
2 using namespace std;
3 
4 int main()
5 {
6     int i;
7     return 0;
8 }
1 #include<iostream>
2 using namespace std;
3 int i;
4 void fun()
5 {
6 
7 }

但是一个文件中的局部变量和全局变量重名,或则一个文件中的局部变量和另外一个文件中的局部变量重名,就不会出现错误。这里注意main函数只能出现在一个文件中,且必须在一个文件中出现哈!

变量的声明

一个文件如果想使用其他文件的全局变量(无论是在块作用域还是在全局作用域),必须对那个变量进行声明(extern int i;),而此时就不为变量分配空间了。

注意:

  • 不要在声明的时候给变量显式赋值,否则将引发错误
  • 声明可以被声明多次的。

const修饰的变量的定义

const修饰不了非类中的函数

1.默认情况下const对象仅在文件内有效,因此如果两个文件定义重复的全局变量均用const修饰或则只有一个用const修饰,则程序不会报错,也就是在不同文件中分别定义了独立的变量,总结起来说,当两个文件定义了同一个全局变量,且两个全局变量没有一个用const修饰,则程序会报错。

2.如果想要在一个文件中定义变量,其他文件对它声明并且使用就必须进行如下操作:

1 //file_1.cc定义并且初始化一个常量,该常量能被其他文件访问
2 extern const int buf = 215;
1 //file_1.h头文件中的声明也由extern做了限定,其作用是指明buf并非本文件独有,它的定义在别的文件中出现
2 extern const int buf;

static关键字

C语言中:(C++中继承了这种用法)

static关键字和const关键字一样都能防止不同文件定义的全局变量名称冲突。

和const的不同:

  • static修饰的变量可以修改
  • 如果另外一个文件想使用static修饰的全局变量,必须在另外一个文件中包含.cpp文件,这样会使得另外一个文件重复该文件的代码,更耗费时间

静态函数(函数前面加static)的好处跟静态全局变量的好处就类似了:
1.静态函数不能被其它文件所用;
2.其它文件中可以定义相同名字的函数,不会发生冲突;

posted on 2023-03-14 21:01  小凉拖  阅读(185)  评论(0编辑  收藏  举报