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

变量声明和定义的区别

我们在程序设计中,时时刻刻都用到变量的定义和变量的声明,可有些时候我们对这个概念不是很清楚,知道它是怎么用,但却不知是怎么一会事,下面我就简单的把他们的区别介绍如下:(望我的指点对你受益)

变量的声明有两种情况:

1、一种是需要建立存储空间的。例如:int a 在声明的时候就已经建立了存储空间。

2、另一种是不需要建立存储空间的。 例如:extern int a 其中变量a是在别的文件中定义的。

前者是“定义性声明(defining declaration)”或者称为“定义(definition)”,而后者是“引用性声明(referncing declaration)”,从广义的角度来讲声明中包含着定义,即定义是声明的一个特例,所以并非所有的声明都是定义,例如:int a 它既是声明,同时又是定义。然而对于 extern a 来讲它只是声明不是定义。一般的情况下我们常常这样叙述,把建立空间的声明称之为“定义”,而把不需要建立存储空间的声明称之为“声明”。很明显我们在这里指的声明是范围比较窄的,即狭义上的声明,也就是说非定义性质的声明,例如:在主函数中:

int main() {
extern int A;
//这是个声明而不是定义,声明A是一个已经定义了的外部变量
//注意:声明外部变量时可以把变量类型去掉如:extern A;
dosth(); //执行函数
}
int A; //是定义,定义了A为整型的外部变量

外部变量的“定义”与外部变量的“声明”是不相同的,外部变量的定义只能有一次,它的位置是在所有函数之外,而同一个文件中的外部变量声明可以是多次的,它可以在函数之内(哪个函数要用就在那个函数中声明)也可以在函数之外(在外部变量的定义点之前)。系统会根据外部变量的定义(而不是根据外部变量的声明)分配存储空间的。对于外部变量来讲,初始化只能是在“定义”中进行,而不是在“声明”中。所谓的“声明”,其作用,是声明该变量是一个已在后面定义过的外部变量,仅仅是为了“提前”引用该变量而作的“声明”而已。extern 只作声明,不作任何定义。

(我们声明的最终目的是为了提前使用,即在定义之前使用,如果不需要提前使用就没有单独声明的必要,变量是如此,函数也是如此,所以声明不会分配存储空间,只有定义时才会分配存储空间。)

用static来声明一个变量的作用有二:

(1)对于局部变量用static声明,则是为该变量分配的空间在整个程序的执行期内都始终存在。

(2)外部变量用static来声明,则该变量的作用只限于本文件模块。

时间: 2024-10-16 21:49:18

C++ 变量的声明与定义的区别的相关文章

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

声明(declaration):意味着告诉编译器关于变量名称.变量类型.变量大小.函数名称.结构名称.大小等等信息,并且在声明阶段不会给变量分配任何的内存. 定义(definition):定义就是在变量声明后,给它分配上内存.可以看成“定义 = 声明 + 内存分配”. 例如: #include <iostream> using namespace std; int addtion(int a,int b);//声明 struct product{unsigned int weight;doub

第2章 变量和基本类型 附2 --声明和定义的区别

变量声明和定义的区别 我们在程序设计中,时时刻刻都用到变量的定义和变量的声明,可有些时候我们对这个概念不是很清楚,知道它是怎么用,但却不知是怎么一会事,下面我就简单的把他们的区别介绍如下:(望我的指点对你受益) 变量的声明有两种情况: 1.一种是需要建立存储空间的.例如:int a 在声明的时候就已经建立了存储空间.----定义 2.另一种是不需要建立存储空间的. 例如:extern int a 其中变量a是在别的文件中定义的.-----声明 前者是“定义性声明(defining declara

函数的声明和定义的区别

函数声明和定义的区别(1) C语言编译系统是由上往下编译的.一般被调函数放在主调函数后面的话,前面就该有声明.不然C由上往下的编译系统将无法识别.正如变量必须先声明后使用一样,函数也必须在被调用之前先声明,否则无法调用!函数的声明可以与定义分离,要注意的是一个函数只能被定义一次,但可以声明多次. 函数声明由函数返回类型.函数名和形参列表组成.形参列表必须包括形参类型,但是不必对形参命名.这三个元素被称为函数原型,函数原型描述了函数的接口.定义函数的程序员提供函数原型,使用函数的程序员就只需要对函

C语言中的声明与定义的区别

1.对于下面的声明语句 int a; 如果其位置出现在所有的函数体之外,那么它就被称为外部对象a的定义.这个语句说明了a是一个外部整型变量,同时为a分配了存储空间.因为外部对象a并没有被明确指定任何初始值,所以它的初始值默认为0(某些系统中的连接器对以其他语言编写的程序并不保证这一点,C编译器有责任以适当方式通知连接器,确保未指定初始值的外部变量初始化为0). 2.又如下面的声明语句: int a = 7; 在定义a的同时也为a明确指定了初始值.这个语句不仅为a分配内存,而且也说明了在该内存中应

2、变量的声明与定义&amp;内部函数和外部函数

[3]变量的声明与定义 对于函数.声明部分是对有关标识符(变量.函数.结构体)的属性进行声明:函数的声明是函数的原型,而函数的定义是对函数功能的定义.对被调函数的声明是放在主调函数的声明部分,而函数的定义显然不在声明部分的范围内,是独立模块! 对于变量.在声明部分出现的变量有两种情况:需要建立存储空间的(int a;),不需要简历存储空间的(extern a;)前者称定义性声明:后者称引用性声明: [4]内部函数和外部函数 有的函数只能被本文件中的其他函数调用,不能被其他文件中的函数调用:有的只

声明与定义的区别

声明与定义的区别 声明是向编译器介绍名字--标识符.它告诉编译器"这个函数或变量在某处可找到,它的模样象什么".而定义是说:"在这里建立变量"或"在这里建立函数".它为名字分配存储空间.无论定义的是函数还是变量,编译器都要为它们在定义点分配存储空间.对于变量,编译器确定变量的大小,然后在内存中开辟空间来保存其数据,对于函数,编译器会生成代码,这些代码最终也要占用一定的内存. 在C和C++中,可以在不同的地方声明相同的变量和函数,但只能有一个定义(

C++中声明和定义的区别

声明 这有一个与这个名字相关的东西,并且它是这个类型的,告诉编译器我要使用它,并期待它定义在某一个地方. 定义 定义是指提供所有必要的信息(占用内存大小),使其能够创建整个实体. 我们必须明白的: 一旦定义了也就是声明了,所以可以同时声明和定义一个函数. 类或者变量,但是不一定非得这样做. 定义一个函数意味着提供函数体: void func() {}; 定义一个类意味着给出类的方法以及成员: class A {}; 定义一个变量意味着告诉编译器变量的类型以及在程序的哪儿去创建这个变量: int

变量声明和定义的区别

我们在程序设计中,时时刻刻都用到变量的定义和变量的声明,可有些时候我们对这个概念不是很清楚,知道它是怎么用,但却不知是怎么一会事,下面我就简单的把他们的区别介绍如下:(望我的指点对你受益) 变量的声明有两种情况: 1.一种是需要建立存储空间的.例如:int a 在声明的时候就已经建立了存储空间. 2.另一种是不需要建立存储空间的. 例如:extern int a 其中变量a是在别的文件中定义的. 前者是“定义性声明(defining declaration)”或者称为“定义(definition

变量声明与定义的区别

本质区别在于是否分配内存.int a; 在声明的时候就已经建立了存储空间,所以既是声明又是定义extern int a; a是在别的文件中定义的,所以这里仅是声明类中的变量只是声明而不是定义,只有在实例化以后才会分配内存.EnclosingClass jb; //声明jb = new EnclosingClass(); //定义