zoukankan      html  css  js  c++  java
  • C\C++语言细节(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  全局变量区,

  • 相关阅读:
    Redis中的批量删除数据库中的Key
    Solr中初学Demo
    Solr中Schema.xml中文版
    Eclipse中web项目的默认发布路径改为外部Tomcat中webapp路径
    Java操作XML的工具类
    Java中创建操作文件和文件夹的工具类
    Java中的操作日期的工具类
    Java POI操作Excle工具类
    【转】怎样写一个解释器
    【转】什么是语义学
  • 原文地址:https://www.cnblogs.com/shuguang/p/2807705.html
Copyright © 2011-2022 走看看