博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C\C++语言细节(2)
阅读量:6275 次
发布时间:2019-06-22

本文共 878 字,大约阅读时间需要 2 分钟。

C\C++ :  auto  register   extern  static  的作用????

对于一个完整的程序,在内存中的分布情况如下图:

代码区 //low address

全局数据区

堆区// new  /malloc   动态分配的位子,,也就是内存中未被使用的那部分内存

栈区 //high address(局部变量)

auto register 都是定义局部变量的,auto int a 和 int a,无差异,不过最近填了一个新功能(可推断类型):auto a=10;知道a=int a=10;(VS2010,codeblocks)

编译---》链接(extern 表示定义在别个文件中)

A.cpp{  int i; main{}}   B.cpp{

int i;main(){}}

编译的时候不会报错,全局变量在编译的时候不透明,

而在链接的时候,会发现有两个i,报错

A.cpp{   main{

i;}}   B.cpp{
int i;main(){}}

在A中不声明,直接当成用B中的全局变量i,

在编译的时候就会出错(编译阶段不透明)

办法:

extern:

A.cpp{  extern int i; main{}}   B.cpp{

int i;main(){}}

 

static:更麻烦,

static int i ;静态全局变量,全局变量区,

定义全局变量就可以实现变量在文件中的共享

静态全局变量不能被其它文件所用;

 

int i; 默认动态全局变量,

 

静态局部变量:在函数的内部定义,但是还是在全局数据区分配内存:

int f(){static int n=1;n++;cout<<n;}

main(){f();f();f();} 第一次调用的时候定义,第二个就不用定义,输出:2,3,4

 

在类中:静态数据成员:被该类的所有对象所共享

            静态成员函数只能访问静态数据成员和函数

 

extern   static  全局变量区,

 

转载于:https://www.cnblogs.com/shuguang/archive/2012/12/07/2807705.html

你可能感兴趣的文章
第三章:Shiro的配置——深入浅出学Shiro细粒度权限开发框架
查看>>
openstack虚拟机修改IP地址
查看>>
80后创业的经验谈(转,朴实但实用!推荐)
查看>>
初识 lex
查看>>
让Windows图片查看器和windows资源管理器显示WebP格式
查看>>
我的友情链接
查看>>
TCP and UDP Small Servers
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
Linux的dd命令
查看>>
从服务器下载一个离线包,格式为gz的压缩包,怎么解压呢。
查看>>
vim使用点滴
查看>>
embedded linux学习中几个需要明确的概念
查看>>
mysql常用语法
查看>>
Morris ajax
查看>>
【Docker学习笔记(四)】通过Nginx镜像快速搭建静态网站
查看>>
ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务
查看>>
<转>云主机配置OpenStack使用spice的方法
查看>>
java jvm GC 各个区内存参数设置
查看>>
[使用帮助] PHPCMS V9内容模块PC标签调用说明
查看>>