三九宝宝网宝宝教育教学论文

c里 static是什么意思

12月30日 编辑 39baobao.com

[c语言中的运算符优先级高低是什么意思]运算符用于执行程序代码运算,会针对一个以上操作数项目来进行运算。例如:2+3,其操作数是2和3,而运算符则是“+”。 运算符的优先级是从上到下依次递减,最上面具有最高的优先级,逗...+阅读

要理解static,就必须要先理解另一个与之相对的关键字,很多人可能都还不知道有这个关键字,那就是auto,其实我们通常声明的不用static修饰的变量,都是auto的,因为它是默认的,就象short和long总是默认为int一样;我们通常声明一个变量: int a; string s; 其实就是: auto int a; auto string s; 而static变量的声明是: static int a; static string s; 这样似乎可以更有利于理解auto和static是一对成对的关键字吧,就像private,protected,public一样; 对于static的不理解,其实就是对于auto的不理解,因为它是更一般的;有的东西你天天在用,但未必就代表你真正了解它;auto的含义是由程序自动控制变量的生存周期,通常指的就是变量在进入其作用域的时候被分配,离开其作用域的时候被释放;而static就是不auto,变量在程序初始化时被分配,直到程序退出前才被释放;也就是static是按照程序的生命周期来分配释放变量的,而不是变量自己的生命周期;所以,像这样的例子: void func() { int a; static int b; } 每一次调用该函数,变量a都是新的,因为它是在进入函数体的时候被分配,退出函数体的时候被释放,所以多个线程调用该函数,都会拥有各自独立的变量a,因为它总是要被重新分配的;而变量b不管你是否使用该函数,在程序初始化时就被分配的了,或者在第一次执行到它的声明的时候分配(不同的编译器可能不同),所以多个线程调用该函数的时候,总是访问同一个变量b,这也是在多线程编程中必须注意的! static的全部用法: 1.类的静态成员: class A { private: static int s_value; }; 在cpp中必须对它进行初始化: int A::s_value = 0;// 注意,这里没有static的修饰! 类的静态成员是该类所有实例的共用成员,也就是在该类的范畴内是个全局变量,也可以理解为是一个名为A::s_value的全局变量,只不过它是带有类安全属性的;道理很简单,因为它是在程序初始化的时候分配的,所以只分配一次,所以就是共用的; 类的静态成员必须初始化,道理也是一样的,因为它是在程序初始化的时候分配的,所以必须有初始化,类中只是声明,在cpp中才是初始化,你可以在初始化的代码上放个断点,在程序执行main的第一条语句之前就会先走到那;如果你的静态成员是个类,那么就会调用到它的构造函数; 2.类的静态函数: class A { private: static void func(int value); }; 实现的时候也不需要static的修饰,因为static是声明性关键字; 类的静态函数是在该类的范畴内的全局函数,不能访问类的私有成员,只能访问类的静态成员,不需要类的实例即可调用;实际上,它就是增加了类的访问权限的全局函数:void A::func(int); 静态成员函数可以继承和覆盖,但无法是虚函数; 3.只在cpp内有效的全局变量: 在cpp文件的全局范围内声明: static int g_value = 0; 这个变量的含义是在该cpp内有效,但是其他的cpp文件不能访问这个变量;如果有两个cpp文件声明了同名的全局静态变量,那么他们实际上是独立的两个变量; 如果不使用static声明全局变量: int g_value = 0; 那么将无法保证这个变量不被别的cpp共享,也无法保证一定能被别的cpp共享,因为要让多个cpp共享一个全局变量,应将它声明为extern(外部)的;也有可能编译会报告变量被重复定义;总之不建议这样的写法,不明确这个全局变量的用法; 如果在一个头文件中声明: static int g_vaule = 0; 那么会为每个包含该头文件的cpp都创建一个全局变量,但他们都是独立的;所以也不建议这样的写法,一样不明确需要怎样使用这个变量,因为只是创建了一组同名而不同作用域的变量; 这里顺便说一下如何声明所有cpp可共享的全局变量,在头文件里声明为extern的: extern int g_value; // 注意,不要初始化值! 然后在其中任何一个包含该头文件的cpp中初始化(一次)就好: int g_value = 0; // 初始化一样不要extern修饰,因为extern也是声明性关键字; 然后所有包含该头文件的cpp文件都可以用g_value这个名字访问相同的一个变量; 4.只在cpp内有效的全局函数: 在cpp内声明: static void func(); 函数的实现不需要static修饰,那么这个函数只可在本cpp内使用,不会同其他cpp中的同名函数引起冲突;道理和如果不使用static会引起的问题和第3点一样;不要在头文件中声明static的全局函数,不要在cpp内声明非static的全局函数,如果你要在多个cpp中复用该函数,就把它的声明提到头文件里去,否则在cpp内部声明需要加上static修饰;在C语言中这点由为重要! 另外: 前一阵子在一段程序中用到了关键字static,就是静态类成员,当时的情况是所有对象都需要访问一个全局对象,所以自然就想到了静态数据成员,静态数据成员被当作该类的全局对象,它对每个类类型只有一份拷贝,该类所有对象共享访问。

那么它同全局变量相比有什么优势呢? 一是静态数据成员不会与程序中的其他全局名字冲突,因为它在类中包含着。 二是静态数据成员可以实现数据隐藏,它可以是private成员。 需要注意的是静态数据成员需要在类外进行初始化,但整形的const静态数据成员可以在类中用常量初始化。如我们定义一个类A: ...

以下为关联文档:

PCL打印语言是啥意思?对我打印有好处吗激光打印三大语言(PS、PCL、GDI) 打印语言就是一个命令集, 它告诉打印机如何组织被打印的文档. 这些命令不是被单独地传送, 而是由打印机驱动程序把它们嵌在打印数据中传给打印...

c语言中数组中排序中的冒泡法是什么意思上午回答人家的,现在贴过来(楼上说的都是对的,你结合着理解看看): 找排序的区别,一定要动手(用笔,不是电脑)去执行代码,不用问你也可以看出代码怎么排的,而且你自己对这问题的理解也更...

c语言函数的返回值是什么意思所谓函数返回值是一个函数在运算结束以后向调用它的母函数或者系统反馈一个值,这个值可以是各种变量类型. 举个简单的例子: int add(int a,int b) { return (a+b); } int main...

议论文中的论题论点论证及论证方法是什么意思我是一名学生,老师最近讲的,我把笔记给你 论点 是你的观点 论证就是用各种论证方法去说明你的观点 论证方法有很多:举例论证(用举例的方法去论证) 比预论证(用比喻方法论证,让人易...

c语言中static说明是什么意思static 用来说明静态变量。 1、如果是在函数外面定义的,那么其效果和全局变量类似,即static说明的变量可以在当前c程序文件中使用。 2、如果是在函数内部定义的,那么这个变量只...

C语言中static是做什么用的在C语言中,static的字面意思很容易把我们导入歧途,其实它的作用有三条。 (1)第一个作用:隐藏。 当我们同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性...

c语言的static与函数变量你在函数中定义static变量,在定义的时候须得给他赋值,而且在程序运行中,只有第一次调这个函数时你所赋的值才有效果,之后每次调此函数,都不会重新给他赋值了(例如staitc a = 10,下...

static这个函数static 是C中很常用的修饰符,它被用来控制变量的存储方式和可见性 static 声明的变量在C语言中有两方面的特征: 1)、变量会被放在程序的全局存储区中,这样可以在下一次调用的时...

c语言关于static#include void main() { int f1(int); int a=1,i; for(i=0;iprintf("%d\n",f1(a)); printf("根据以上结果可知,函数f1中,a与b的值每次都重置,而c的值就是上一次执行的结果不变,也就...

推荐阅读
图文推荐