1.变量的定义:变量的定义用于为变量分配存储空间,还可以为变量指定初始值。在一个程序中,变量有且仅有一个定义。
2.变量的声明:用于向程序表明变量的类型和名字。程序中变量可以声明多次,但只能定义一次
-
变量的声明有两种情况
(1) 一种是分配内存空间的(声明)。例如:int a在声明的时候就已经分配了内存空间。
(2) 另一种是不需要分配内存空间的(声明)。例如:extern int a其中变量a是在别的文件中定义的。第一种是"定义性声明",或者称为”定义",第二种是"引用性声明"。可以理解为声明中包含着定义,但是并非所有的声明都是定义, 例如:int a既是声明,同时又是定义。然而对于extern a来讲它只是声明不是定义。
3.定义和声明的区别
一般的情况下我们常常这样叙述,把分配内存空间的声明称之为"定义",把不需要分配内存空间称的声明之为"声明"。
extern int a; //声明
int b; //定义
int b=1; //初始化
b=2; //赋值
//另外在定义的时候也可以初始化,也就是我们常用的写法
int c=3;
4.为什么需要区分声明和定义:
C++程序通常由许多文件组成。为了让多个文件访问相同的变量,C++区分了声明和定义。任何在多个文件中使用的变量都需要既有定义又有声明。在这种情况下,在一个文件中定义了变量,在其他使用改变了的文件中则只能包含变量的声明(不能再包含定义,因为变量只能定义一次)。
5.真正用的时候 这种需要被别的文件用的变量,必须在本文件中定义好,比如在文件1中定义int i=0;然后才可以再别的文件中使用,使用方式是:在类体的外部使用extern int i;这样在这个类中就可以使用该外部变量了,再次强调必须先定义好,才能再别的地方通过extern声明使用。例:
#include <QDebug>
#include "myclass.h"
int test_i;//定义 等同于 extern test_i =0;
MyClass::MyClass(QWidget *parent, Qt::WFlags flags)
: QMainWindow(parent, flags)
{
ui.setupUi(this);
qDebug()<<test_i;
}
MyClass::~MyClass()
{
}
#include "YourClass.h"
//#include "myclass.h"
extern int test_i;//在此类类体外部声明,在此类中即可使用
YourClass::YourClass(void)
{
test_i++;
}
YourClass::~YourClass(void)
{
}