C++ 变量的定义与声明的区别

wuchangjian2021-10-29 17:11:10编程学习

变量的定义

        变量的定义用于为变量分配存储空间,还可以为变量指定初始值。在一个程序中,变量有且仅有一个定义。

变量的声明

        用于向程序表明变量的类型和名字。程序中变量可以声明多次,但只能定义一次。变量的声明有两种情况

  • 一种是分配内存空间的(声明)。例如:int a在声明的时候就已经分配了内存空间。
  • 另一种是不需要分配内存空间的(声明)。例如:extern int a其中变量a是在别的文件中定义的。

 第一种是"定义性声明",或者称为”定义",第二种是"引用性声明"。

 “定义性声明”可以理解为声明中包含着定义。但是并非所有的声明都是定义, 例如:int a既是声明,同时又是定义。然而对于extern int a来讲它只是声明不是定义。

定义和声明的区别

        一般的情况下我们常常这样叙述,把分配内存空间的声明称之为"定义",把不需要分配内存空间称的声明之为"声明"。

extern int a; //声明,后面(本文内或其他与本文件链接的文件内)必须定义该变量,也就是有int a;这一个定义

int b; //定义
int b=1; //初始化
b=2; //赋值

//另外在定义的时候也可以初始化,也就是我们常用的写法
int c=3;

为什么需要区分声明和定义

        C++程序通常由许多文件组成。为了让多个文件访问相同的变量,C++区分了声明和定义。任何在多个文件中使用的变量都需要既有定义又有声明。在这种情况下,在一个文件中定义了变量,在其他使用该变量的文件中则只能包含变量的声明(不能再包含定义,因为变量只能定义一次)。

        真正用的时候,这种需要被别的文件用的变量,必须在本文件中定义好。比如在文件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) 
{ 
}

原文连接:c++变量的声明和定义 - wsl-hitsz - 博客园

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。