中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 编程语言 > C/C++
static关键字
作者:未知 时间:2005-09-13 23:29 出处:Blog.ChinaUnix.net 责编:chinaitpower
              摘要:static关键字

C和C++根本就不是一回事;从设计之初就不该用相近的语法;

一边试验一边记录

在C和C++中,static类型变量存储位置一致,都放在程序的全局存储区中;

//----------------------------------------------------------------------------------------------------------------

C里边就两种情况而已;

一是静态全局变量,作用域仅限于变量被定义的文件中,其他文件用extern声明没法使用它;

   准确地说作用域是从定义之处开始,到文件结尾结束;在定义只处前面的那些程序行也不能使用它;

   想要使用就得在前面再加extern ***;比较变态,直接在文件顶端定义不就得了;

二是静态局部变量,在函数体里面定义的,就只能在这个函数里用了,同一个文件中的其他函数也用不了;

  void funcx(){

      static long dwvalue;  //这个值就只能在这个函数里面用了,函数退出了,值还留在里面;

                                    // 函数下次被调用的时候里面的值还是上次退出时的,就这么点用处;

                                    //再有就是如果静态局部变量如果带有初始赋值,如下:

      static long rlvalue = 78;    //这个赋值其实是在编译的时候进行的,这个值在整个程序运行期间只会初始化一次,

                                            //并不会在每次函数运行时赋一次值;

  }

//-----------------------------------------------------------------------------------------------------------------

C++:

关于静态全局变量和静态局部变量是和C相同的;

static的成员函数和成员变量就不一样了,完全是外部的;

为什么涅?好像我是这么理解的,本来定义个类就是为了复用,你让人家在别的模块里用不了,那算什么!?

所以就用呗;

ClassName::Value  , ClassName::Function()  这样很常见吧;

类的static数据成员,只是声明了在那占个空;编译器不对类内部静态数据成员分配空间;

你要用的话还得自己去声明一个全局静态变量;

静态数据成员不论public\protected\private的都可以用ClassName::Name访问;

class CA{

public:

     static long value; //这是骗人的,编译的时候不给它分配空间;

     static void  fun();

private:

     static long value1;   //这个私有的除了用 CA::value1以外就只能用成员函数和友元函数访问了

};

long CA::value;    //必须自己声明一个,否则连接时出错;

static CA ao;    //可以定义个静态对象,这个对象可以在其他模块用extern 声明,然后调用它的这个value,用其他的会连接错误;

void func(){

static CA ai;   //这个和外面那个一样,也只能在其他模块用来做static成员的作用域分辨;

}

关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有