- c++的存储类别
- 首先我们得知道c++的变量存储方式:静态存储和动态存储两种,全局变量使用的是静态存储,函数的形参和局部变量是使用的动态存储。
- 当然在有的教程中又分为自动存储,静态存储,动态存储。相信所有朋友都知道内存四区的概念,这个所说的静态存储就是存储在我们所说的数据区中,自动存储就是说存储在栈中的变量,而动态存储就是说在堆区的变量。
- 而第二行的叫法就是把自动存储并入了动态存储(当然真正的程序的运行时的内存机制远远不是这么简单,得去学习操作系统,内核编程等很多知识才能搞清楚,在这里就不叙述了,主要是不会,半桶水,嘿嘿)
- 下面我们来看下函数中可以声明或者定义的4中类型的变量auto,static,register,extern
auto举个例子
#include<iostream> using namespace std; int sum() { auto ; //相当于int x=0;我们平时使用的时候auto是默认,可以不写 return x; } int main() { int x=sum(); //这里相当于auto int x=sum(); auto可以写也而已不写 system("pause"); ; }
7.是不是复制粘贴进你的vs有错误,(类型说明符的组合无效),嘿嘿,当然有错了,这是因为auto的语意发生了改变,新版的c++auto的意思是自动类型推倒,如果你非得让上面的例子成功的话,那么可以去百度,应该怎么设置vs。
static用这个关键字声明的变量是在静态区,
#include<iostream> using namespace std; int sum(int x) { ;//y会一直保存在程序中,是静态存储,并且只会进行一次初始化 y = y + x; return y; } int main() { cout << sum() << endl; cout << sum() << endl; system("pause"); ; }
8.register用这个关键字声明的变量,是存储在寄存器中,访问速度非常快,因此一般用于循环时候要多次用到的变量,由于电脑中寄存器并不多,因此register声明的变量个数不能多
代码就不写了,同上
#include<iostream> using namespace std; int sum() { register ;//寄存器变量 ) y++; return y; } int main() { cout << sum() << endl; cout << sum() << endl; system("pause"); ; }
9.extern 声明的变量是外部变量,什么意思呢,比如a.cpp中有个变量int c=0;在b.cpp中想用它怎么办呢,extern int c;就ok了,当然a.cpp和b.cpp得是同一个项目