static使用相关详解

来源:互联网 发布:趣发现是什么软件 编辑:程序博客网 时间:2024/06/06 18:41

//01static.cc
#include<iostream>using namespace std;void Test1(){//局部静态变量    //---1.只能使用在该函数作用范围,就是说在该函数函数体内可以使用(必须在定义结束后)//---2.若重复调用该函数,由于该静态变量a只定义一次,数据会使用改变了的//---3.与普通局部变量的区别:静态局部变量只有当程序结束才释放内存,而普通局部变量在对应函数执行完就释放内存//---4.注:如果在定义局部变量时不赋初值的话,对静态局部变量来说,编译时自动赋初值0(对数值型变量)或空字符(对字符变量)。//-----而对自动变量来说,如果不赋初值则它的值是一个不确定的值,且之后调用的时候会被当成静态变量使用。与第三点有些冲突请注意!//---     所以对于普通局部变量一定要初始化!static int a;a++;int b=0;//存储类型关键字auto修饰:auto register static externb++;cout<<"a="<<a<<endl;cout<<"b="<<b<<endl;return;}int main(int argc,char**argv){Test1();Test1();Test1();    //cout<<"a="<<a<<endl;return 0;}

//02static.cc
#include<iostream>#include<stdio.h>#include<stdlib.h>using namespace std;static int a=0;int b=10;void Test1(){//全局静态变量    //---1.存放于静态存储区//---2.与静态局部变量的区别:都是当程序结束才释放内存,但两者的作用范围不一样,全局 > 局部//---3.与普通全局变量的区别:都加了extern关键字说明,但静态的多个statica++;printf("a=%d\n",a);return;}int main(int argc,char**argv){printf("a=%d\n",a);Test1();Test1();Test1();return 0;}
//03static.cc   03static.h   03main.cc

#include"03static.h"void Test(){b++;printf("b=%d\n",b);printf("addr b=%p\n",&b);return ;}int Test1(){printf("b=%d\n",b);    printf("addr b=%p\n",&b);    printf("a=%d\n",a);    printf("addr a=%p\n",&a);return b;}
#ifndef _03STATIC_H#define _03STATIC_H#include<iostream>#include<stdio.h>#include<stdlib.h>using namespace std;static int b=10;extern int a;void Test();int Test1();#endif


#include"03static.h"int a=10;/*   全局静态变量用于外部文件中   相当于重新定义,只是因为加了static不会出现重复定义的问题   但是查看一下两个地址就发现地址不一样,后面一个是0Xxxxx58,另一个是0Xxxxx5c,多了4个字节(相当于一个int的大小)   所以   1.想要使用外部文件中的值最好使用返回值取出来,或者用实参 以传地址传参方式传出来   2.想要使用外部文件(03main.cc)的变量,最好在欲使用区域的头文件(03static.h)里 加上extern声明,经过查看发现两个变量的地址一样   注:要使用的变量的文件(如果有的话)要包含进该头文件,如果没有可以在进行编译的时候将前者加上*/int main(int argc,char**argv){printf("addr a=%p\n",&a);b=Test1();printf("b=%d\n",b);//10printf("addr b=%p\n",&b);return 0;}




0 0
原创粉丝点击