关于c++中的全局变量(不赋值的全局变量算定义)
定义有三种:
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++中的全局变量(不赋值的全局变量算定义)的更多相关文章
- ajax请求获取的数据无法赋值给全局变量问题总结
一.总结: 1.问题描述: 今天做项目遇到在用表单显示详细信息的过程中ajax请求获取的数据无法赋值给全局变量的情况,从列表页面进入详情页,在详情页面被渲染了之后就会调用js文件里的接口向服务器请求数 ...
- python中的浅拷贝与赋值不同
Python中的对象之间赋值时是按引用传递的,如果需要拷贝对象,需要使用标准库中的copy模块. 1. copy.copy 浅拷贝 只拷贝父对象,不会拷贝对象的内部的子对象. 2. copy.deep ...
- jquery选中将select下拉框中一项后赋值给text文本框
jquery选中将select下拉框中一项后赋值给text文本框,出现无法将第一个下拉框的value赋值给文本框 因为select默认选中第一项..在选择第一项时,便导致无法激发onchange事件. ...
- oracle赋值问题(将同一表中某一字段赋值给另外一个字段的语句)
将同一表中某一字段赋值给另外一个字段的语句update jxc_ckmx ckmx1 set ckmx1.ddsl = (select ckmx2.sl from jxc_ckmx ckmx2 whe ...
- 【转】千万不要在JS中使用连等赋值操作
原文链接 千万不要在JS中使用连等赋值操作 目录 前言 赋值顺序? 连续赋值能拆开写么? 后记 前言 文章标题这句话原本是在国外某JavaScript规范里看到的,当时并没有引起足够的重视,直到最 ...
- jquery ajax 中实现给变量赋值
我们在用JQuery的Ajax从后台提取数据后想把它赋值给全局变量,但是却怎么都赋不进,为什么呢? 原因其实很简单,我们用的Ajax是异步操作,也就是说在你赋值的时候数据还没提取出来,你当然赋不进去, ...
- UPDATE语句中SET部分列赋值的先后顺序有影响么?
昨天研发同事问我个问题,UPDATE语句中SET部分列赋值的先后顺序会影响结果么?以前没考虑过这个问题,因为通常我们都会UPDATE时给列赋予一个确定的值,而不是一个依赖于其他列的值. 测试环境: D ...
- jquery ajax 中不能给变量赋值的原因及解决办法
我们在用JQuery的Ajax从后台提取数据后想把它赋值给全局变量,但是却怎么都赋不进,为什么呢? 原因其实很简单,我们用的Ajax是异步操作,也就是说在你赋值的时候数据还没提取出来,你当然赋不进去, ...
- php中全局变量global和超全局变量$GLOBALS
php中全局变量global和超全局变量$GLOBALS 1.global Global的作用是定义全局变量,但是这个全局变量不是应用于整个网站,而是应用于当前页面,包括include或require ...
随机推荐
- table中tr的display属性在火狐中显示不正常,IE中显示正常
最近在作项目的时候碰到一个问题,就是需要AJAX来交互显示<tr> </tr> 标签内的东西,按照常理,对于某一单元行需要显示时,使用:display:block属性,不需要显 ...
- 九度OJ 1261:寻找峰值点 (基础题)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:500 解决:37 题目描述: 给定一个整数序列,该整数序列存在着这几种可能:先递增后递减.先递减后递增.全递减.全递增. 请找出那个最大值的 ...
- Alamofire 小试牛刀
1.定义请求头 let headers: HTTPHeaders = [ "token": "W4SIjb3gHgJqgG8LRWj0jM==", " ...
- spring AOP操作
在spring进行AOP操作,使用aspectj实现 一.aspectj准备 aspectj不是spring的一部分,和spring一起使用进行AOP的操作 1.除了spring基本的jar包还需要导 ...
- leetcode第一刷_Best Time to Buy and Sell Stock II
这道题尽管是上一道题的增强.可是反而简单了. 能够交易无数次,可是买卖必须成对的出现. 为了简单起见.我用abc三股股票来说明,且忽略掉相等的情况.三个数一共同拥有六种大小关系.注意他们之间的先后顺序 ...
- G20峰会将会给数字货币带来哪些影响?
G20峰会对于全球经济有着举足轻重的影响,其成员人口占全球的2/3,国土面积占全球的60%,国内生产总值占全球的90%,贸易额占全球的75%……作为国际经济合作的主要平台,G20在引领和推动国际经济合 ...
- android ui篇 自己写界面
对于一些较为简单的界面则自己进行写. 在这里就需要了解xml文件中一些基本的属性以及android手机的知识. 一.目前手机屏幕像素密度基本有5种情况.(以下像素密度简称密度) 密度 ldpi mdp ...
- Android JSON And Object Cast
Ref:JSON字符串转换成Java实体类(POJO) Ref:Java.Json转换方式之二:Jackson Ref:Jackson 框架,轻易转换JSON Ref:几种序列化协议(protobuf ...
- HTML URL 编码:请参阅:http://www.w3school.com.cn/tags/html_ref_urlencode.html
http://www.w3school.com.cn/tags/html_ref_urlencode.html
- java入门了解13
小知识点: 网络编程:主要解决计算机间数据传输 不需要html页面可以达到数据传输:QQ,微信 网页编程:继续Html页面基础上数据交互:OA,天猫... java方向:web方向,annrod常用S ...