c++primer 内存模型 关于全局静态变量

要想创建链接性为外部的静态持续变量,必须在代码块的外面声明他;要想创建链接性为内部的静态持续变量,必须在代码块的外面声明他,并使用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>

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值