【C/C++知识点】变量的4种存储类型

简介: 【C/C++知识点】变量的4种存储类型

变量的4种存储类型


存储类用于定义C++程序中变量和函数的生命周期和可见性。


寿命是指变量保持活动的时间段,可见性是指可访问变量的程序的模块。


有五种类型的存储类,可以在C++程序中使用:


自动(Automatic)

寄存器(Register)

静态(Static)

外部(External)

可变(Mutable)


数据类型

  • 数据类型: 如 int ,float 等。
  • 存储类型: 总共有四种存储类型的变量,分别为自动变量(auto)、静态变量(static)、外部变量(extern)以及寄存器变量(register)


auto - 函数中所有的非静态局部变量

auto是所有局部变量的默认存储类。

auto关键字自动应用于所有局部变量。

{
    auto int v1;
    float v2 = 99.1;
}


上面的例子定义了两个具有相同存储类的变量,auto只能在函数中使用。


register - 一般经常被使用的的变量(如某一变量需要计算几千次)可以设置成寄存器变量,register 变量会被存储在寄存器中,计算速度远快于存在内存中的非 register 变量。


寄存器变量在寄存器中分配存储器而不是RAM。 其大小与寄存器大小相同。 它比其他变量具有更快的访问速度。


建议仅使用寄存器变量进行快速访问!


ex:在计数器中。

register int count=0;


  • 注意:不能得到寄存器变量的地址。
  • static - 在变量前加上 static 关键字的变量,它只会定义一次,以后反复定义这个变量都是使用同一个。
    静态变量只初始化一次,直到程序结束。
    它保留可在多个函数之间调用的值。
    静态变量由编译器提供的一个默认值:0。
void func() { 
    static int v1=0; //static variable 
    int v2=0; //local variable
    v1++;
    v2++;
    cout<<"v1=" << v1<<" v2=" <<v2<<endl;
}


调用上面的func()会发现每次调用v1的值都会增加,而v2的值不会变。


extern - 把全局变量在其他源文件中声明成 extern 变量,可以扩展该全局变量的作用域至声明的那个文件,其本质作用就是对全局变量作用域的扩展。


extern变量对所有程序都可见。


如果两个或多个文件共享相同的变量或函数,则使用它。

extern int v1 = 0;


externDemo.cpp

#include<stdlib.h>
int extern_value = 10;


main.cpp

#include<stdlib.h>
#include<iostream>
using namespace std;
extern int extern_value;    //从externDemo.cpp中取过来
static int p1 = 24;//全局静态变量
//寄存器变量
void register_demo() {
    register int j = 0; //不能在全局定义
    printf("register_demo:j=%d ", j);
    //register可以不用再用,是C遗留下来的
    //C++的register关键字已经优化,可以不用去申明
    //如果我们打印它的地址,它就变成了普通的auto变量
    printf("&j:0x%p\n", &j);
}
//静态局部变量量
void static_demo() {
    static int p2 = 23;
    int p3 = 23;
    p2++, p3++;
    //每次调用这个函数p2都会在上次的值的基础上加1,而p3只会等于24
    printf("static_demo:p2=%d p3=%d\n", p2, p3);
}
//外部变量
void extern_demo() {
    extern_value++;
    printf("extern_demo:extern_value=%d\n", extern_value);
}
int main()
{
    auto i = 0; //自动变量,自动定义为整数变量
    register_demo();
    static_demo();
    static_demo();
    static_demo();
    extern_demo();
    return 0;
}


91d372c21ad04a0ab2ae26e07406b0da.png


变量的作用域和生存周期



c8640d32afce4b1c918db9e69495b999.png

目录
相关文章
|
1月前
|
C语言 C++
实现两个变量值的互换[C语言和C++的区别]
实现两个变量值的互换[C语言和C++的区别]
23 0
|
3月前
|
存储 安全 C++
C++:指针引用普通变量适用场景
指针和引用都是C++提供的强大工具,它们在不同的场景下发挥着不可或缺的作用。了解两者的特点及适用场景,可以帮助开发者编写出更加高效、可读性更强的代码。在实际开发中,合理选择使用指针或引用是提高编程技巧的关键。
34 1
|
2月前
|
JavaScript 前端开发 Java
通过Gtest访问C++静态、私有、保护变量和方法
通过Gtest访问C++静态、私有、保护变量和方法
74 0
|
5月前
|
存储 网络协议 编译器
【干货总结】Linux C/C++面试知识点
Linux C/C++基础与进阶知识点,不仅用于面试,平时开发也用得上!
592 13
|
5月前
|
安全 C++
C++一分钟之-互斥锁与条件变量
【6月更文挑战第26天】在C++并发编程中,`std::mutex`提供互斥访问,防止数据竞争,而`std::condition_variable`用于线程间的同步协调。通过`lock_guard`和`unique_lock`防止忘记解锁,避免死锁。条件变量需配合锁使用,确保在正确条件下唤醒线程,注意虚假唤醒和无条件通知。生产者-消费者模型展示了它们的应用。正确使用这些工具能解决同步问题,提升并发性能和可靠性。
64 4
|
5月前
|
存储 C++ 容器
C++一分钟之-变量与数据类型入门
【6月更文挑战第18天】**C++编程基础:变量与数据类型概览** 了解变量(存储数据的容器)和数据类型是编程入门的关键。声明变量如`int age = 25;`,注意初始化和类型匹配。基本数据类型包括整型(int等)、浮点型(float、double)、字符型(char)和布尔型(bool)。理解类型范围和精度,使用字面量后缀增强可读性。深入学习数组、指针、结构体和类,以及动态内存管理,避免数组越界和内存泄漏。不断实践以巩固理论知识。
43 1
|
5月前
|
程序员 编译器 C++
探索C++语言宝库:解锁基础知识与实用技能(类型变量+条件循环+函数模块+OOP+异常处理)
探索C++语言宝库:解锁基础知识与实用技能(类型变量+条件循环+函数模块+OOP+异常处理)
48 0
|
6月前
|
C++
c++变量作用域
c++变量作用域
64 2
|
6月前
|
存储 安全 编译器
c++变量类型
c++变量类型
48 1
|
5月前
|
C++
C++之变量与常量
C++之变量与常量