﻿<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Gavin&#039;s Blog &#187; static</title>
	<atom:link href="http://laigw.name/tag/static/feed" rel="self" type="application/rss+xml" />
	<link>http://laigw.name</link>
	<description>Keep it simple, stupid. Simplicity is beauty.</description>
	<lastBuildDate>Sun, 29 Jan 2012 07:14:51 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>c与c static函数的区别</title>
		<link>http://laigw.name/post/11.html</link>
		<comments>http://laigw.name/post/11.html#comments</comments>
		<pubDate>Fri, 14 Nov 2008 12:03:09 +0000</pubDate>
		<dc:creator>Gavin</dc:creator>
				<category><![CDATA[C/C++]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[static]]></category>

		<guid isPermaLink="false">http://www.laigw.name/?p=11</guid>
		<description><![CDATA[static关键字是C, C++中都存在的关键字, 它主要有三种使用方式, 其中前两种只指在C语言中使用,  第三种在C++中使用(C,C++中具体细微操作不尽相同,  本文以C++为准).
(1)局部静态变量
(2)外部静态变量/函数
(3)静态数据成员/成员函数
下面就这三种使用方式及注意事项分别说明

一、局部静态变量
在C/C++中, 局部变量按照存储形式可分为三种auto, static, register
(&#60;C语言程序设计(第二版)&#62;谭浩强,  第174-175页)
与auto类型(普通)局部变量相比, static局部变量有三点不同
1. 存储空间分配不同
auto类型分配在栈上, 属于动态存储类别, 占动态存储区空间, 函数调用结束后自动释放,  而static分配在静态存储区, 在程序整个运行期间都不释放. 两者之间的作用域相同, 但生存期不同.
2. static局部变量在所处模块在初次运行时进行初始化工作, 且只操作一次
3. 对于局部静态变量, 如果不赋初值, 编译期会自动赋初值0或空字符, 而auto类型的初值是不确定的. (对于C++中的class对象例外,  class的对象实例如果不初始化, 则会自动调用默认构造函数, 不管是否是static类型)
特点:  static局部变量的”记忆性”与生存期的”全局性”
所谓”记忆性”是指在两次函数调用时, 在第二次调用进入时, 能保持第一次调用退出时的值.
示例程序一
#include &#60;iostream&#62;
using namespace std;
void  staticLocalVar()
{
static int a = 0; // 运行期时初始化一次, 下次再调用时,  不进行初始化工作
cout&#60;&#60;&#8221;a=&#8221;&#60;&#60;a&#60;&#60;endl;
++a;
}
int  main()
{
staticLocalVar(); // [...]]]></description>
		<wfw:commentRss>http://laigw.name/post/11.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

