美文网首页
「C 基础」变量类型

「C 基础」变量类型

作者: _凉风_ | 来源:发表于2016-05-16 09:19 被阅读32次

C 语言内存分配

  • 常量区:存放 常量字符串
  • 堆:存放 对象
  • 栈:存放 局部变量

变量的属性

一、变量的作用域

C 语言根据 变量 作用域 的不同,将变量分为 局部变量全局变量

1. 局部变量

  • 定义
    在函数 内部 定义的变量「形式参数也属于局部变量」
  • 作用域
    只在定义它的函数内部有效,即只有在定义它的函数内部使用,其它函数不能使用它

2. 全局变量

  • 定义
    在 所有函数外部 定义的变量
  • 作用域
    从定义变量的位置开始到源程序结束,即全局变量可以被在其 **定义位置之后 **的其它函数所共享
int a;    //全局变量
 
 int main ()
 {
     int b; //局部变量
     return 0;
 }

二、变量的存储类型「变量存储在什么地方」

决定了变量何时创建、何时销毁以及它的值能保持多久,即 决定了变量的生命周期

  • 用于存储变量的位置:普通内存、运行时堆栈、硬件寄存器
  • 三种变量的存储类型:自动变量、静态变量、寄存器变量

1. 自动变量

定义

  • 存储在堆栈中,被关键字 auto修饰 的局部变量
  • 极少使用这个关键字,基本上是废的,所有的局部变量在默认情况下都是自动变量

生命周期

  • 在程序执行到声明自动变量的代码块(函数)时,自动变量才被创建
  • 当自动变量所在的代码块(函数)执行完毕后,这些自动变量就会自行销毁
  • 如果一个函数被重复调用,这些自动变量每次都会重新创建
void test(int a, int b) //a, b 为自动变量
{
  int c = a + b; //c 也为自动变量
  auto int d; //d 也为自动变量
}

2. 静态变量

定义

  • 存储在 静态内存中,不属于堆栈
  • 被关键字 static 修饰的 局部变量「并不会改变作用域,只会改变生命周期
  • 被关键字 static 修饰的 全局变量「只能用于本文件」
  • 所有的 全局变量 都是 静态变量

生命周期

  • 在程序运行之前创建,在程序的整个运行期间始终存在,直到程序结束
#include <stdio.h>
 
 int a; //静态变量
 
 void test() {
     static int b = 0; //静态变量:只能创建一次,执行一次,下次调用时不会被重新初始化为0
     b++; //只改变了它的存储类型「生命周期」,并没有改变它的作用域
          //变量 b 还是只能在 test 函数内部使用
     
     int c = 0; //自动变量
     c++;
        
     printf("b=%d, c=%d \n", b, c);
 }
 
 int main() {
     int i; //自动变量
     for (i = 0; i<3; i++) {
         test();
     }
     
     return 0;
 }

输出结果为:b=1, c=1
      b=2, c=1
      b=3, c=1

3. 寄存器变量

定义

  • 存储在硬件寄存器中的变量,被关键字 register 修饰
  • 比存储在内存中的变量访问效率更高「默认情况下,自动变量和静态变量都是放在内存中」
  • 只有 自动变量 才可以是寄存器变量,全局变量 和 静态局部 变量 不行
  • 只限于 int、char 和 指针类型 变量使用

生命周期

  • 因为寄存器变量本身就是自动变量,所以函数中的寄存器变量在调用该函数时占用寄存器中存放的值
  • 当函数结束时释放寄存器,变量消失

注意

  1. 计算机中寄存器数目有限,不能使用太多的寄存器变量
  2. 如果寄存器使用饱和,程序将寄存器变量自动转换为自动变量处理
  3. 为了提高运算速度,一般会将一些频繁使用的自动变量定义为寄存器变量,这样程序尽可能地为它分配寄存器存放,而不用内存

三、static 和 extern 关键字

static 和 extern 可以修饰

相关文章

  • 「C 基础」变量类型

    C 语言内存分配 常量区:存放 常量字符串 堆:存放 对象 栈:存放 局部变量 变量的属性 一、变量的作用域 C ...

  • 2017 10 17

    今天一天就C#语言基础进行学习主要内容包括:字符类型、变量与常量、String类型等内容。 声明变量: 变量类型 ...

  • 2017 10 16

    今天就C#语言基础进行学习,主要包括数据类型 (*)、变量与常量、String类型、类型转换 (**)等相关内容。...

  • C语言基础教程之数据类型

    C语言中的类型可分为以下四类,C语言基础教程之数据类型 c中的数据类型是指用于声明不同类型的变量或函数的扩展系统。...

  • 01-C#基础

    C#基础 l 变量命名规范: l 数据类型: @使字符串失去转义字符的作用 l 类型转换: "

  • C语言-数据类型

    C语言中数据类型是什么重要的,他们是定义变量的基础。C语言中数据类型大体上可以分为:基本数据类型,构造类型,指针...

  • 《C++ Primer》读书笔记

    前言 把《C++ Primer》读薄系列笔记全集。 目录 第I部分:C++基础 开始学习C++ 变量和基本类型 字...

  • C#语言入门详解006

    006 C#类型、变量与对象详解 目录 *什么是类型*类型在C#语言中的作用*C#语言的类型系统*变量、对象与内存...

  • GO

    一、基础 1.变量 强类型语言 声明单个变量Go语言在声明变量时,自动对变量对应的内存进行初始化操作,不同于C语言...

  • C语言内存

    在阐述C语言内存布局之前,首先我们来介绍一下C语言变量的类型;在C语言中的变量类型有自动变量,全局变量,静态变量以...

网友评论

      本文标题:「C 基础」变量类型

      本文链接:https://www.haomeiwen.com/subject/rzcbrttx.html