学习c++ 第三天-第二部分(C++ 存储类)

 C++ 程序中可用的存储类:(c++的存储类就是定义 [控制]C++ 程序中变量/函数的范围(可见性)和生命周期)

C++ 不允许同时指定一种存储类以后,只能是每次单独指定一种存储类

  • auto
  • register(用于定义存储在寄存器中而不是 RAM 中的局部变量)
  • static(与java用法一样)
  • extern (extern 是用来在一个文件中声明一个已在其它文件中已声明过的全局变量或函数)
  • mutable
  • thread_local (C++11)

从 C++ 11 开始,auto 关键字不再是 C++ 存储类说明符,且 register 关键字被弃用。

auto 存储类

auto 关键字用于两种情况:声明变量时根据初始化表达式自动推断该变量的类型、声明函数时函数返回值的占位符(返回值类型)。

auto f=3.14;      //double
auto s("hello");  //const char*
auto z = new auto(9); // int*
auto x1 = 5, x2 = 5.0, x3='r';//错误,必须是初始化为同一类型

extern 存储类

extern 存储类用于提供一个全局变量的引用,全局变量对所有的程序文件都是可见的。当您使用 'extern' 时,对于无法初始化的变量,会把变量名指向一个之前定义过的存储位置。

当您有多个文件且定义了一个可以在其他文件中使用的全局变量或函数时,可以在其他文件中使用 extern 来得到已定义的变量或函数的引用。可以这么理解,extern 是用来在另一个文件中声明一个全局变量或函数。

extern 修饰符通常用于当有两个或多个文件共享相同的全局变量或函数的时候

A.cpp
#include <iostream>
 
int count ;
extern void write_extern();//已在下面B文件中定义过了
 
int main()
{
   count = 5;
   write_extern();
}
-----------------------------------------------------------------------
B.cpp
#include <iostream>
 
extern int count;//已在上面A文件中定义过了
 
void write_extern(void)
{
   std::cout << "Count is " << count << std::endl;
}

typedef

typedef的用途: 为已有的数据类型重新命名。
<1. 基本类型>

int a=10;
//为整型重新命名
typedef int ZS;
ZS b=10;

<2. 结构体的使用>

typedef struct Books
{
   char  title[50];
   char  author[50];
   char  subject[100];
   int   book_id;
}Books;

现在,您可以直接使用 Books 来定义 Books 类型的变量,而不需要使用 struct 关键字。下面是实例:

Books Book1, Book2;

您可以使用 typedef 关键字来定义非结构类型,如下所示:

typedef long int *pint32;
 
pint32 x, y, z;

x, y 和 z 都是指向长整型 long int 的指针。

a. 为结构体重新命名:

//ST---->等价于struct Student
typedef struct Student
{
   int id;
   char sex;
}ST;

b. 为结构体重新命名(指针类型)

//PST---->等价于struct Student*
typedef struct Student
{
   int id;
   char sex;
}* PST;

c. 混合使用

//PST等价于struct Student*
//ST等价于struct Student
typedef struct Student
{
   int id;
   char sex;
}* PST,ST;

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值