定义有三种:

1.不赋值的定义:int a;

2.赋值的定义:int a=5; 或者 int a;a=5;

3.加extern的定义:extern int a=5;//其实和不加是一样的。

声明只有一种:

extern int a;

所有,不要再问我变量不赋值算不算定义,告诉你,算!!!!,你要是敢包含两次不赋值的变量的头文件两次,编译器就敢报错,重定义!!!!

c++单定义语法规则:变量只能定义一次。

定义与声明的区别:

定义:声明一个变量,且为它分配内存空间。

声明:只声明一个变量,并不为它分配内存空间。

因此定义变量的过程已经声明了这个变量。

定义变量的方法:

int a;//定义一个变量a,并且分配了内存空间,值为0(虽然没有显示为变量a提供值,但是编译器已经为a分配了内存空间,且赋值为0)

int a=5;//定义变量a,并赋值为5(显示的赋值为5)

extern int a=5;//虽然加上了extern关键字,但是由于显示的赋值了,所以仍然是定义。

那如何只声明变量呢?

extern int a;//extern关键字表示变量a已经在别处定义了,这里需要使用,就声明一下。这也是说要使用全局变量,必须要提前声明一下。

因此全局变量使用规则为:

1.在define.cpp文件中定义变量

//define.cpp

[extern] int a=3;//在文件define.h中定义一个全局变量a,赋值为3.(extern关键字可以有,也可以没有)

2.在define.h文件中声明变量

extern int a;

3.在用户文件中引用变量

//user.h

方法一:#include "define.h"  //包含用extern声明的全局变量的文件(因为已经声明了,这里包含一下就可以了)

或者用extern关键字声明

方法二:extern int a;  //2.必须声明已经定义了的变量a,这里没有给a分配内存,而是对外部定义好的a的引用;

4.使用全局变量

a+=1;  //3.使用全局变量。

注意:

1.在使用全局变量时,加extern关键字表示系统会在其它文件中查找这个变量。

2.千万不要在头文件内定义全局变量(即使不赋值也算定义),那样如果有两个文件都包含了这个头文件,则会出现redefine错误。

3.全局变量最好在.cpp文件内定义,在对应.h文件内用extern声明,使用方包含这个头文件就可以了。

或者在.cpp文件内定义,在使用方用extern声明就可以了。

关于c++中的全局变量(不赋值的全局变量算定义)的更多相关文章

  1. ajax请求获取的数据无法赋值给全局变量问题总结

    一.总结: 1.问题描述: 今天做项目遇到在用表单显示详细信息的过程中ajax请求获取的数据无法赋值给全局变量的情况,从列表页面进入详情页,在详情页面被渲染了之后就会调用js文件里的接口向服务器请求数 ...

  2. python中的浅拷贝与赋值不同

    Python中的对象之间赋值时是按引用传递的,如果需要拷贝对象,需要使用标准库中的copy模块. 1. copy.copy 浅拷贝 只拷贝父对象,不会拷贝对象的内部的子对象. 2. copy.deep ...

  3. jquery选中将select下拉框中一项后赋值给text文本框

    jquery选中将select下拉框中一项后赋值给text文本框,出现无法将第一个下拉框的value赋值给文本框 因为select默认选中第一项..在选择第一项时,便导致无法激发onchange事件. ...

  4. oracle赋值问题(将同一表中某一字段赋值给另外一个字段的语句)

    将同一表中某一字段赋值给另外一个字段的语句update jxc_ckmx ckmx1 set ckmx1.ddsl = (select ckmx2.sl from jxc_ckmx ckmx2 whe ...

  5. 【转】千万不要在JS中使用连等赋值操作

    原文链接 千万不要在JS中使用连等赋值操作   目录 前言 赋值顺序? 连续赋值能拆开写么? 后记 前言 文章标题这句话原本是在国外某JavaScript规范里看到的,当时并没有引起足够的重视,直到最 ...

  6. jquery ajax 中实现给变量赋值

    我们在用JQuery的Ajax从后台提取数据后想把它赋值给全局变量,但是却怎么都赋不进,为什么呢? 原因其实很简单,我们用的Ajax是异步操作,也就是说在你赋值的时候数据还没提取出来,你当然赋不进去, ...

  7. UPDATE语句中SET部分列赋值的先后顺序有影响么?

    昨天研发同事问我个问题,UPDATE语句中SET部分列赋值的先后顺序会影响结果么?以前没考虑过这个问题,因为通常我们都会UPDATE时给列赋予一个确定的值,而不是一个依赖于其他列的值. 测试环境: D ...

  8. jquery ajax 中不能给变量赋值的原因及解决办法

    我们在用JQuery的Ajax从后台提取数据后想把它赋值给全局变量,但是却怎么都赋不进,为什么呢? 原因其实很简单,我们用的Ajax是异步操作,也就是说在你赋值的时候数据还没提取出来,你当然赋不进去, ...

  9. php中全局变量global和超全局变量$GLOBALS

    php中全局变量global和超全局变量$GLOBALS 1.global Global的作用是定义全局变量,但是这个全局变量不是应用于整个网站,而是应用于当前页面,包括include或require ...

随机推荐

  1. 微信小程序事件

    微信小程序事件1.什么是事件2.事件类别3.事件冒泡4.事件绑定5.事件对象详解笔记:1.事件是一种用户的行为,是一种通讯方式.2.事件类别:    点击事件:tap    长按事件:longtap  ...

  2. hdu 4902 Nice boat(线段树区间改动,输出终于序列)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4902 Problem Description There is an old country and ...

  3. org.apache.poi3.1.7 Excle并发批量导入导出

    org.apache.poi3.1.7 升级,需要修改设置方式: 1.org.apache.poi3.1.4 的设置单元格: XSSFCellStyle cellStyle = wb.createCe ...

  4. TFS中工作项的定制- 字段功能定义

    参考,翻译此页面All FIELD XML Elements Reference(http://msdn.microsoft.com/en-us/library/ms194953.aspx) 对于每一 ...

  5. 【python】-- 信号量(Semaphore)、event(红绿灯例子)

    信号量(Semaphore) 之前讲的线程锁(互斥锁) 同时只允许一个线程更改数据,而Semaphore是同时允许一定数量的线程更改数据 ,比如厕所有3个坑,那最多只允许3个人上厕所,后面的人只能等里 ...

  6. 页游手游服务器(一)c实现拓展lua网络

    把工作几年服务器相关的部分内容,通过服务器解决方案,做一次总结.整个实现的主体是lua脚本,lua实现主要缺少的两大块:1网络部分2数据库部分这两部分必须通过c/c++做扩展先来做net,主要是服务器 ...

  7. linux c编程:标准IO库

    前面介绍对文件进行操作的时候,使用的是open,read,write函数.这一章将要介绍基于流的文件操作方法:fopen,fread,fwrite.这两种方式的区别是什么呢.1种是缓冲文件系统,一种是 ...

  8. Docker dubbo 服务注册

    vim run.sh #!/bin/baship=`ifconfig eth0 |grep "inet"|awk '{print $2}'`hn=dubbo-service-pro ...

  9. 坑爹的shell 空格

    shell 空格很敏感,被线上代码坑了,占个位,回头好好整理一下

  10. 关于python2中的unicode和str以及python3中的str和bytes

    python3有两种表示字符序列的类型:bytes和str.前者的实例包含原始的8位值:后者的实例包含Unicode字符. python2中也有两种表示字符序列的类型,分别叫做str和unicode. ...