定义和声明的区别

感言:我马上大三了,对计算机也算是有点感兴趣,但一直以来我对变量的定义和声明都很模糊,最开始看书上是这样讲的:定义-->就形如 int a;这就是定义了一个整形变量,然后就说变量的定义只能是一次而声明却可以多次,然后就没,我也问了好几个老师,他们也都是这样说的,我在网上搜的答案也感觉讲得不是很细,所以我总觉得这不是我想要的答案,直到我看了<<C陷阱与缺陷>>后才明白了原来里面还是有很多值得深挖的地方,所以分享给大家,我的所以的例子都是在VC6.0下实验的,先来看第一个例子:

1:

void main()
{
	extern int a;//定义和声明不能放在同一个函数里
	int a=10;   //再定义a=10错误
	cout<<hex<<&a<<endl;
}

2:

extern int a;//这是声明
void main()
{
	int a=10;   //(这是定义)并且这样定义是对的
	cout<<hex<<&a<<endl;
}

3:

void main()
{
	extern int a;//声明
	cout<<hex<<&a<<endl;//这说明声明是不占内存空间的,所以这个取地址是错误的
}

4:

extern int a=10;//全局的声明占内存空间
void main()
{

	cout<<a<<endl;
	cout<<hex<<&a<<endl;
}

5:

void main()
{
	extern int a=10;//在函数体内声明不能被初始化
	cout<<a<<endl;//这是一个错误的表达式
}

6:

extern int a;//说明声明可以声明多次,而定义却只能定义一次
extern int a;
extern int a;
void main()
{
	int a=10;
	cout<<a<<endl;
}	

总结:举了怎么多例子,如果你以前也和我一样对声明和定义有点模糊,相信你应该有所了解了吧,但我其实还有一点没有想明白为什么全局的声明就可以赋值并且有内存空间,可能是编译器给我们做了手脚,但教科书上是这样说的:变量的定义只能被定义一次,而声明可以是多次,记住这一点很重要!

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-12 17:32:33

定义和声明的区别的相关文章

【编程语言】变量的定义以及与extern声明的区别

变量的定义与声明的区别 首先,变量的定义一定是发生在变量声明(extern)之前,变量的声明可以有多个,但是变量的定义只有一种,变量的声明影响变量的引用和作用域,而变量的定义则只是单方面的创建变量以及初始化赋值等,若变量再定义时没有初始化,则会在文件执行编译的时候随机赋值 1)变量在定义时分配内存空间,同时也可能进行赋初值 2)变量在声明时不会分配内存空间,变量的声明只是声明变量存在,可能引用其他文件中位置的声明变量,其作用是声明变量是在已定义的变量后面进行的 变量分为变量名和变量值 变量名的地

Java中定义和声明

Java中最基本的就是定义变量和声明变量. 定义和声明的区别: 声明是向编译器介绍名字-标识符.它告诉编译器这个函数或变量在某处可以找到,它的模样像什么.而定义是说:"在这里建立变量"或"在这里建立函数".它为名字分配存储空间.无论定义的是函数还是变量,编译器都要为他们在定义点分配存储空间.对于变量,编译器确定变量的大小,然后在内存中开辟空间来保存数据,对于函数,编译器会生产代码,这些代码最终也要占用一定的内存.基本类型变量的声明和定义(初始化)是同时产生的:而对于

定义与声明

C++声明和定义的区别 收藏 <C++Primer>第四版 2.3.5节中这么说到: ①变量定义:用于为变量分配存储空间,还可为变量指定初始值.程序中,变量有且仅有一个定义. ②变量声明:用于向程序表明变量的类型和名字. ③定义也是声明:当定义变量时我们声明了它的类型和名字. ④extern关键字:通过使用extern关键字声明变量名而不定义它. 1.定义也是声明,extern声明不是定义,即不分配存储空间.extern告诉编译器变量在其他地方定义了. 例如:extern int i; //声

C++ Primer 学习笔记_15_类与数据抽象(1)_类的定义和声明

C++ Primer 学习笔记_15_类与数据抽象(1)_类的定义和声明 在C++中,用类来定义自己的抽象数据类型.通过定义类型来对应所要解决的问题中的各种概念,可以使我们更容易编写.调试和修改程序.可以使得自己定义的数据类型用起来与内置类型一样容易和直观. 看一下Sales_item类: class Sales_item { private: std::string isbn; unsigned units_sold; double revenue; public: double ave_pr

C语言指针与数组的定义与声明易错分析

部分摘自<C语言深度解剖> 1.定义为数组,声明为指针 在文件1中定义: char a[100]; 在文件2中声明: extern char *a; //这样是错误的 这里的extern告诉编译器a这个名字已经在别的文件中被定义了,下面的代码使用的a是在别的文件中定义的.编译器是按文件分别编译的,当a被声明为char* a时,编译器理所当然的认为a是一个指针变量,在32位系统下占用4个byte,这4个byte存放的是地址,地址指向的空间存储的是char类型数据. 程序会返回SIGSEGV. 2

C++ Primer 学习笔记_47_类与数据抽象 --类的定义和声明【上】

类 --类的定义和声明[上] 引言: 在C++中,用类来定义自己的抽象数据类型.通过定义类型来对应所要解决的问题中的各种概念,可以使我们更容易编写.调试和修改程序.可以使得自己定义的数据类型用起来与内置类型一样容易和直观. 一个前面曾经定义过的类: class Sales_item { private: std::string isbn; unsigned units_sold; double revenue; public: double ave_price() const; bool sam

定义与声明、头文件与extern总结(转)

本文转自: http://lpy999.blog.163.com/blog/static/117372061201182051413310/ http://blog.csdn.net/feitianxuxue/article/details/7204116 感谢博主,如有侵犯请告知删除  用#include可以包含其他头文件中变量.函数的声明,为什么还要extern关键字? 如果我想引用一个全局变量或函数a,我只要直接在源文件中包含#include<xxx.h> (xxx.h包含了a的声明)不

进程与线程的定义、关系及区别

进程与线程的定义.关系及区别     --参考博客文章:http://blog.csdn.net/yanxiaolx/article/details/51763372 一.进程的定义 进程:指在系统中能独立运行并作为资源分配的基本单位,它是由一组机器指令.数据和堆栈等组成的,是一个能独立运行的活动实体. 进程一般有三个状态:就绪状态.执行状态和等待状态[或称阻塞状态]:进程只能由父进程建立,系统中所有的进程形成一种进程树的层次体系:挂起命令可由进程自己和其他进程发出,但是解除挂起命令只能由其他进

C语言变量的定义和声明

今天犯了一个低级的错误,在头文件中定义了一个变量,而该头文件被多个源文件调用,导致该变量重复定义.然后我就把改变量改成static类型的了,这下编译倒是不出错了,就是结果跟我想象的不一样,在一个文件中改了,而在另一个文件用的时候,结果为0. 然后发现这个错误好低级,正确的用法是在源文件中定义,在头文件中声明,而别的源文件想用,就引用该头文件. 我们来说说定义和声明的关系: 定义:指有这么个东西,而且就放在这. 声明:仅仅指有这么个东西,它是在别的文件中定义的. 所以定义只能一次,而声明是可以多次