C++— —变量的四种存储类型

简介: C++— —变量的四种存储类型

所有的数据都有两种类型

数据类型:

如 int,float 等


存储类型:

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


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

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


static - 在变量前加上 static 关键字的变量。

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


#include <stdlib.h>
#include <iostream>
using namespace std;
extern int extern_value;
static int yahuan_xiaoli = 24;//全局静态变量
//int yahuan_extern = 30;
//寄存器变量
void register_demo() 
{
  register int j = 0;
  printf("j: %d\n", j);
  //C++ 的 register 关键字已经优化,如果我们打印它的地址,它就变成了
  //普通的 auto 变量
  for (register int i = 0; i < 1000; i++) 
  {
    //....
  }
  printf("&j : 0x%p\n", &j);
  {
    int k = 100;
    k += j;
  }
  printf("register_demo - register_demo: %d\n", yahuan_xiaoli);
}
//局部静态变量
void static_demo() 
{
  static int girl = 18;
  int yahuan = 17;
  ++girl;
  ++yahuan;
  printf("girl: %d yahuan: %d\n", girl, yahuan);
  printf("static_demo - register_demo: %d\n", yahuan_xiaoli);
}
//外部变量
void extern_demo() 
{
  extern_value++;
  printf("extern_value:%d\n", extern_value);
}
int main(void) 
{
  int i = 0; //C 语言的 auto 不会报错,C++ auto 已经升级啦
  //register_demo();
  //static_demo();
  //static_demo();
  //static_demo();
  extern_demo();
  system("pause");
  return 0;
}

变量的作用域和生存周期


存储类别

存储期

作用域

声明方式

auto

自动

块内

register

自动

块内,使用关键字 register

static(局部)

静态

块内,使用关键字 static

static(全局)

静态

文件内部

所有函数外,使用关键字 static

extern

静态

文件外部

所有函数外


函数返回值使用指针

可以返回函数内部:动态分配内存地址 局部静态变量地址 以及全局静态变量和外部变量 地址

// demo 9-8.c
#include <iostream>
#include <stdlib.h>
using namespace std;
int* add(int x, int y)
{
  int sum = x + y;
  return &sum;
}
//返回动态内存分配地址
int* add1(int x, int y)
{
  int* sum = NULL;
  sum = new int;
  *sum = x + y;
  return sum;
}
//返回局部静态变量的地址
int* add2(int x, int y)
{
  static int sum = 0;
  printf("sum: %d\n", sum);
  sum = x + y;
  return &sum;
}
int main()
{
  int a = 3, b = 5;
  int* sum = NULL;
  //cout << add(a, b) << endl;
  //sum = add(a, b);//不能使用外部函数局部变量的地址 bad
  //接收外部函数动态内存分配的地址 ok
  //sum = add1(a, b);
  //cout<<*sum<<endl;
  //delete sum;
  //接收外部函数局部静态变量的地址
  sum = add2(a, b);
  cout << *sum << endl;
  *sum = 88888;
  add2(a, b);
  system("pause");
  return 0;
}


相关文章
|
3月前
|
存储 编译器 C++
C++程序变量存储类别:深入理解与应用
C++程序变量存储类别:深入理解与应用
52 1
|
3月前
|
存储 C++
C++程序指针变量:深入理解与实践
C++程序指针变量:深入理解与实践
32 1
|
2月前
|
安全 C++
C++一分钟之-互斥锁与条件变量
【6月更文挑战第26天】在C++并发编程中,`std::mutex`提供互斥访问,防止数据竞争,而`std::condition_variable`用于线程间的同步协调。通过`lock_guard`和`unique_lock`防止忘记解锁,避免死锁。条件变量需配合锁使用,确保在正确条件下唤醒线程,注意虚假唤醒和无条件通知。生产者-消费者模型展示了它们的应用。正确使用这些工具能解决同步问题,提升并发性能和可靠性。
32 4
|
2月前
|
存储 C++ 容器
C++一分钟之-变量与数据类型入门
【6月更文挑战第18天】**C++编程基础:变量与数据类型概览** 了解变量(存储数据的容器)和数据类型是编程入门的关键。声明变量如`int age = 25;`,注意初始化和类型匹配。基本数据类型包括整型(int等)、浮点型(float、double)、字符型(char)和布尔型(bool)。理解类型范围和精度,使用字面量后缀增强可读性。深入学习数组、指针、结构体和类,以及动态内存管理,避免数组越界和内存泄漏。不断实践以巩固理论知识。
30 1
|
2月前
|
程序员 编译器 C++
探索C++语言宝库:解锁基础知识与实用技能(类型变量+条件循环+函数模块+OOP+异常处理)
探索C++语言宝库:解锁基础知识与实用技能(类型变量+条件循环+函数模块+OOP+异常处理)
30 0
|
2月前
|
C++
C++之变量与常量
C++之变量与常量
19 0
|
3月前
|
C++
c++变量作用域
c++变量作用域
30 2
|
3月前
|
存储 安全 编译器
c++变量类型
c++变量类型
28 1
|
3月前
|
存储 安全 编译器
C++数据类型与变量:深入理解与应用
C++数据类型与变量:深入理解与应用
|
3月前
|
C++
C++ 变量作用域
C++ 变量作用域
32 0