zoukankan      html  css  js  c++  java
  • C++中的变量属性小结

    其实在C++中,一个变量除了数据类型以外,还有3种属性:

    (1)存储类别:C++中允许使用auto,static,register,extern 4种存储类别。

    (2)作用域:指在程序中可以使用该变量的区域。

    (3)存储期或者生存期:指变量在内存中的存储周期。

    以上3种属性是有联系的,程序设计者只能声明变量的存储类别,通过存储类别可以确定变量的作用域和存储期。

    注意存储类别的用法:auto,static和register 3 种存储类别只能用于变量的定义语句,而extern只能用来声明已定义的外部变量,不能用于变量的定义。

    1. 局部变量和全局变量

     在一个函数体内部定义的变量是内部变量,它只在本函数范围内有效,这些内部变量称为局部变量。局部变量只在本函数范围内有效。

     在函数之外定义的变量是外部变量,称为全局变量(必须在所有的函数体外)。全局变量的有效范围为从定义变量的位置开始到本源文件结束。

     有一个问题存在,就是在函数的嵌套过程中,定义在里面的函数外面,但在外面的函数体内的变量,应该怎么划分?首先对于外面的函数而言,肯定是它

     自己的局部变量,作用域范围从定义到本函数结束。然后对于里面的函数而言,肯定不是局部变量,却是它的外部变量,称为全局变量也不合适,姑且按照

     Python3的叫法叫做非局部变量。

    2. 动态存储方式和静态存储方式

     在内存中供用户使用的存储空间可分为3部分:

     (1) 程序区。

     (2) 静态存储区。

     (3) 动态存储区。

     在动态存储区中存放以下数据:1)函数形参。在调用函数时给形参分配存储空间。2)函数中定义的变量(未加static声明的局部变量)。

     3)函数调用时的现场保护和返回地址等。

     除此之外,其他的东西大多都存储在静态存储区,可再加以判断。

    3. 自动变量

     在函数中定义的不加关键字static声明的变量,编译器对它们是动态地分配存储空间的。在函数调用结束后就自动释放存储空间,

     因此这类局部变量称为自动变量。

     存储类别auto和数据类型int的顺序任意,关键字auto可以省略。

    4. 用static声明静态局部变量

     静态局部变量在函数调用结束后不消失而保留原值,在下一次该函数调用时该变量保留上一次函数调用结束时的值,即其占用的存储单元到整个程序

     运行结束的时候才会释放。

    5. 用register声明寄存器变量

     C++允许的存储在CPU的寄存器中的局部变量

    6. 用extern声明外部变量

      1)在一个文件内声明全局变量 2)在多文件的程序内声明外部变量

      目的就是扩展全局变量的作用域。

    7. 用static声明静态外部变量

     在定义外部变量时加一个static声明,这些外部变量就只限于本文件引用,而不能被其他文件引用。

    8. 作用域是从空间的角度看的,存储期是从时间的角度看的。

    9. 全局变量,以及所有的加了static声明的变量,它们都是存储在静态存储期上。

    10. 内部函数和外部函数

     如果一个函数只能被本文件中其他函数所调用,它称为内部函数。在定义内部函数时,加static关键字声明。

     外部函数:

     1)在定义函数时,如果在函数首部的最左端冠以关键字extern,则表示此函数时外部函数,可供其他文件调用。此时extern可以省略,

        即定义函数时默认是外部函数。

     2)在需要调用此函数的文件中,用extern声明所用的函数是外部函数。

    ps:这一点内容感觉概念上定义的不是很清晰,这可能也是C++的缺陷之一了吧,嘿嘿。

       反正我自己是理解透彻了,只要用的时候别用错就行。

  • 相关阅读:
    linux之sed用法
    个人记录-虚拟现实
    对于spark以及hadoop的几个疑问(转)
    关于老师的说的技术问题
    为什么我们总是行动不起来?你失败不是因为能力差? 如何才能实现我们的计划?
    Hibernate中一对多和多对一关系
    C# 将PDF文件转换为word格式
    C# 设置word文档页面大小
    C# 将多个office文件转换及合并为一个PDF文件
    C# 给PDF文件添加水印
  • 原文地址:https://www.cnblogs.com/niuxichuan/p/5223513.html
Copyright © 2011-2022 走看看