要想创建链接性为外部的静态持续变量,必须在代码块的外面声明他;要想创建链接性为内部的静态持续变量,必须在代码块的外面声明他,并使用static;要想创建没有链接性的静态持续变量,必须在代码块内声明它,并使用static限定符。
int global =1000;
stactic int one_file=50;
int main()
{
}
void funct1(int n)
{
stactic int count =0;
int llama=0;
}
void funct2(int n)
{
}
在funct1中声明的变量count的作用域为局部,没有链接性,这意味着只能子啊funct1中使用它,就行自动变量llama一样,但是,不一样的是,即使在funct1函数没有被执行时,cout也是存在在内存中的。global和one_file的作用域都是整个文件,即在从声明位置到文件结尾的范围内都可以被使用。具体地说,可以再main,funct1 funct2中使用,由于one_file的链接性为内部,只能在包含上述代码的文件中使用它,而global的链接性是外部,因此可以在程序的其他文件中使用。
2 在一个文件中定义了一个全局变量(赋值后),如果在另一个文件中要使用它,必须先进性声明,并加上extern进行声明。
external.cpp
#include<iostream>
using namespace std;
double warming=0.3;
void update(double dt);
void local();
int main()
{
cout<<"Global warming is "<<warming<<" degrees."<<endl;
update(0.1);
cout<<"Global warming is "<<warming<<" degrees."<<endl;
local();
cout<<"Global warming is "<<warming<<" degrees."<<endl;
cin.get();
return 0;
}
support.cpp
#include<iostream>
using namespace std;
extern double warming;
void update(double dt);
void local();
void update(double dt)
{
extern double warming;
warming+=dt;
cout<<"Updating global warming to "<<warming<<" degrees."<<endl;
}
void local()
{
double warming = 0.8;
cout<<"Local warming = "<<warming<<" degrees."<<endl;
cout<<"But global warming = "<<::warming<<" degrees."<<endl;
}
在文件update()中,使用关键字extern重新声明了变量warming,这个关键字的意思是,通过这个名称使用在外部定义的变量。由于即使省略该声明,update的功能也相同,因此该声明是可选的,他指出该函数被设计成使用外部变量。
local函数声明,定义与全局变量同名的局部变量以后,局部变量将隐藏全局变量。
3.如果在其他文件中使用相同的名称来表示其他变量,单单省略掉extern是不对的,违背了单定义原则,必须使用static
//file1
int errors=20;
//file2
//int errors=100;//error:违背单定义原则
static int errors=100;
void froobish()
{
}
4关于new的
int *pi=new int 相当于 int *pi=new(sizeof(int));
int *pi=new int[40];相当于int *pi=new(40*sizeof(int));
new还有定位的功能,使用前必须使用头文件#include<new>