026day(全局,局部,静态变量和变量的作用域,生存期)

《2017年11月5日》【连续026天】

标题:全局,局部,静态变量和变量的作用域,生存期;

内容:A.观看MOOC10.2,10.3;

           B(a).局部变量:定义在函数内部的变量(包括函数的形参),全局变量:定义在函数外面的变量

全局变量在所有函数中均可使用,局部变量只能在定义它的函数内部使用;

全局变量都是静态变量。定义局部变量时,加“static”,该变量也成为静态变量;

静态变量的存放地址,在整个程序运行期间,都是固定不变的;

非静态变量(一定是局部变量)地址,在函数的一次执行期间不变,每次函数调用时都可能不同;

未明确初始化时,静态变量会被自动初始化成全0(每个bit都为0),非静态变量的值随机;

void Func()
{
static int n = 4; //静态变量只初始化一次
cout<<n<<endl;
++n; 
}
int main()
{
Func();Func();Func();

因为静态变量只输出一次,所以当第一次所以Func函数定义n后,以后的Func将不在定义n;

静态变量应用:

strtok的实现(strtok函数详见023day)

char *Strtok(char*p,char*sep)
{
static char*start;  //本次查找子串的起点 
if(p)   //如果p不为空指针,则是第一次调用Strtok ,故后续调用Strtok第一个实参必须是NULL 
    start=p;
    for(;*start&&strchr(sep,*start);++start);
if(*start==0)
         return NULL;
char *q=start;
for(;*start&&!strchr(sep,*start);++start);
if(*start){
*start=0;
++start;
}          
return q;   
}

  (b).标识符的作用域;变量名,函数名,类型名统称为“标识符”,一个标识符能起作用的范围叫作用域;

使用标识符的语句,必须出现在它们的声明或定义之后,且在作用域外使用该标识符,该标识符会没有定义;

单文件的程序中,结构,函数和全局变量的作用域是其定义的整个文件;

函数形参的作用域是整个函数;局部变量的作用域是从定义它的语句开始,到包含它的最内层”}“结束;

for循环里定义的循环控制变量,其作用域就是整个for循环;

同名标识符的作用域,当大的包含小的时,在小的作用域里,大的标识符被屏蔽,不起作用;

       变量的生存期:在此期间,变量占用内存空间,占用的内存空间只能归它使用,不会被用来存放其他东西;

全局变量的生存期:从程序被装入内存开始,到整个程序结束;

静态局部变量生存期:从定义它的语句第一次被执行,到整个程序结束;

函数形参的生存期:从函数执行开始,到函数返回时结束。

非静态局部变量:从执行到定义它的语句开始,到程序执行到它的作用域之外结束;

明日计划:学习选择排序和插入排序;

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值