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来声明,则该变量的作用只限于本文件模块。

//

 转载:http://www.cnblogs.com/GavinDai/archive/2011/10/24/2222735.html


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/492372.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2019年25大人工智能趋势!一文看到未来

来源:智东西摘要:2019年25个AI趋势。人工智能的下一步是什么?上周,知名机构CBinsights的分析师分析各个行业,得到了2019年最值得关注的25个人工智能趋势。虽然人工智能正在各个行业蔓延,经常成为头条新闻&a…

tomcat server.xml配置详解

元素名属性解释serverport指定一个端口,这个端口负责监听关闭tomcat的请求shutdown指定向端口发送的命令字符串servicename指定service的名字Connector(表示客户端和service之间的连接)port指定服务器端要创建的端口号,并在这个断口监听来自客户端的请求…

重磅!首次发现人类大脑海马体在短时间尺度上对时间信息敏感

来源:brainnews编译:南樛木早期对啮齿动物海马体的研究提供了情景记忆中海马体表达时间信息的一般神经机制证据。对记忆编码的方式涉及到许多信息,科学家们已经研究了其中大部分是如何工作的。但是有一个维度仍未得到解决:时间。最…

2015新款 MacBook 用心的测评与试用. 最轻薄的Mac上市

2015新款 MacBook 不一样的测评与试用. 最轻薄的Mac上市了. 直击现场 《HTML开发MacOSApp教程》 http://pan.baidu.com/s/1jG1Q58M 2015年的春季的苹果特别媒体发布会上, 苹果发布了超轻薄的 MacBook 产品. 或许当你阅读本文的时候已经看过不少跑分, 性能测试文章, 为了不让…

数字图像处理——图像的几何变换

这次学习图像的几何变换,主要有以下内容:图像的平移变换图像的镜像变换图像的转置变换图像的旋转变换图像的缩放1、图像的平移变换在进行书写matlab代码之前,先来了解一下图像平移的理论基础。设图像的高度为H,宽度为W&#xff0c…

万字长文解读运营商搏击5G:一场比拼财力的三国杀

来源:财经无忌摘要:5G时代已经来临,5G走向商用的步伐也在逐渐加快。近日,腾讯科技联合优质科技媒体推出“5G局中局”系列文章,为你解读5G在通讯、物联网、车联网、工业联网、边缘计算、云服务等各行业的应用&#xff0…

每天看一片代码系列(三):codepen上一个音乐播放器的实现

今天我们看的是一个使用纯HTMLCSSJS实现音乐播放器的例子,效果还是很赞的: codePen地址 HTML部分 首先我们要思考一下,一个播放器主要包含哪些元素。首先要有播放的进度信息,还有播放/暂停或者上一首下一首等必要的按钮&#xff0…

OpenCV——读取摄像头并处理图像

1、读取摄像头并处理图像的代码如下&#xff1a; #include<opencv2/opencv.hpp> using namespace cv;//-----------------------------------【main()函数】-------------------------------------------- // 描述&#xff1a;控制台应用程序的入口函…

MVP

MVP是一种广泛使用的UI架构模式&#xff0c;适用于基于事件驱动的应用框架。 能够与 Model直接进行交互的仅限于 Presenter, View 只能通过 Presenter 间拉地调用 Model。 MVP分PV&#xff08;Passive View) 和 &#xff08;Supervising Controller)两种模式 SC(Supervising Co…

OpenCV——图像显示与写入

1、图像显示与写入的代码如下&#xff1a; #include<opencv2/core/core.hpp> #include<opencv2/highgui/highgui.hpp>using namespace cv; using namespace std; //opencv中图像显示与写入 int main() {Mat myMat imread("小狗1.jpg", -1);if (myMat.em…

工业3D打印:一场仍处在初级阶段的技术革命

来源&#xff1a;资本实验室摘要&#xff1a;曾记否&#xff0c;几年前当我们在实体店看到3D打印机打印出的一个个小玩意时&#xff0c;那种油然而生的新鲜与神奇感&#xff1f;然而&#xff0c;短短几年&#xff0c;面对这种新事物&#xff0c;我们已经见怪不怪。此外&#xf…

OpenCV——读取视频文件并写入文件

1、代码如下&#xff1a; #include<opencv2/opencv.hpp> using namespace cv;//-----------------------------------【main()函数】-------------------------------------------- // 描述&#xff1a;控制台应用程序的入口函数&#xff0c;我们…

人工智能的现状与未来(附PPT)

来源&#xff1a;网经科技摘要&#xff1a;人工智能引领新的工业革命&#xff0c;需要正确理解其技术核心、学科定位、架构演进&#xff0c;当前深度学习和知识图谱成其左膀右臂&#xff0c;象征人类智谋的智能博弈在围棋后的下一个高地在哪里&#xff1f;走向人机融合的未来&a…

【最新】三位深度学习创始人共同获得了2019年公布的图灵奖

来源&#xff1a;biendata数据实战派2019年3月27日 ——ACM宣布&#xff0c;深度学习的三位创造者Yoshua Bengio, Yann LeCun, 以及Geoffrey Hinton获得了2019年的图灵奖。今天&#xff0c;深度学习已经成为了人工智能技术领域最重要的技术之一。在最近数年中&#xff0c;计算机…

Throwable 结构图

从这个图中就可以看出运行时异常是数组越界、空指针、类转换错误之类的异常&#xff0c;解决方法是修改代码而其他异常&#xff0c;也就是已检查异常&#xff0c;则是需要抛出或者捕捉转载于:https://www.cnblogs.com/dolphin007/p/4446105.html

无人驾驶产业发展现状及影响

来源&#xff1a;《中国国情国力》杂志摘要&#xff1a;无人驾驶产业将是我国对美欧日等传统汽车大国实现变道超车的重要领域。我国无人驾驶产业需求巨大、规模快速增长&#xff0c;但是人才缺口和尚不完善的法律仍是制约产业发展的障碍。无人驾驶产业改变了就业结构&#xff0…

Java中9种IO的读取方式

数据的读写&#xff0c;按照数据类型可以分为两种&#xff1a;字符流和字节流&#xff08;二者区别&#xff1f;&#xff09;。所以数据读取方式按照数据类型也可以分为两类&#xff1a;字节流的读取和字符流的读取。 一、字节流读取操作&#xff1a;| ||-----1、FileInputStre…

推翻《Nature》:生命不息,神经发生不止...

摘要&#xff1a;热播剧《都挺好》里的巨婴苏大强最后也患了阿尔兹海默症来源&#xff1a;中国生物技术网上图显示了68岁时死亡的男性海马齿状回的组织。他在死亡时有一个健康的大脑。在图片中&#xff0c;新鲜的脑细胞呈红色&#xff0c;成熟的脑细胞呈蓝色。图片来源&#xf…

OpenCV—基本矩阵操作与示例

OpenCV的基本矩阵操作与示例OpenCV中的矩阵操作非常重要&#xff0c;本文总结了矩阵的创建、初始化以及基本矩阵操作&#xff0c;给出了示例代码&#xff0c;主要内容包括&#xff1a;创建与初始化矩阵加减法矩阵乘法矩阵转置矩阵求逆矩阵非零元素个数矩阵均值与标准差矩阵全局…

centos 安装php

1.yum安装 yum install php php-fpm php-common php-gd php-mcrypt php-pear php-pecl-memcache php-mhash php-mysql php-xml 启动php服务命令: /etc/init.d/php-fpm start 2.下载编译安装php 5.3.6&#xff1a; http://php.net/downloads.php yum install libxml2 libxml2-de…