码迷,mamicode.com
首页 > 其他好文 > 详细

static用法

时间:2015-10-02 17:31:18      阅读:208      评论:0      收藏:0      [点我收藏+]

标签:

static用法


static-静态变量

如下代码,使用了静态变量和全局变量

#include <stdio.h>
#include <stdlib.h>

float weight = 1.2; //全局变量
static float high = 1.2;//静态变量

void showCookTimeForTurkey(int pounds){
    int necessaryTime = 15 + 15* pounds;
    printf("cook for %d min",necessaryTime);
}

// 在函数中使用一个全局变量
float add(float element){
    return weight + element;
}

// 在函数中使用一个静态变量。静态变量只能在声明某个静态变量的文件时才能访问该静态变量
// 静态变量是非局部的,存在于任何函数之外的,避免了其他文件的修改
float plus(float element){
    return high + element;
}

int main(int argc,const char * argv[]){
    printf("Hello, World!\n");
    showCookTimeForTurkey(12);
    printf("\n");
    float result = add(1.2f);
    printf("the result is %.2f \n",result);
    float r = plus(1.2f);
    printf("the result is %.2f \n",r);
    return 0;
}

静态变量则限制了其作用域, 即只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用, 因此可以避免在其它源文件中引起错误。


static-静态函数

如下代码,

#include <stdio.h>
#include <stdlib.h>

static void showCookTimeForTurkey(int pounds){
    int necessaryTime = 15 + 15* pounds;
    printf("cook for %d min\n",necessaryTime);
}

int main(int argc,const char * argv[]){
    printf("Hello, World!\n");
    showCookTimeForTurkey(12);
    return 0;
}

内部函数和外部函数

当一个程序由多个源文件组成时,C语言根据函数能否被其它源文件中的函数调用,将函数分为内部函数和外部函数。

内部函数(又称静态函数)

如果在一个源文件中定义的函数,只能被本文件中的函数调用,而不能被同一程序其它文件中的函数调用,这种函数称为内部函数。

定义一个内部函数,只需在函数类型前再加一个“static”关键字即可,如下所示:

static void showCookTimeForTurkey(int pounds){
    int necessaryTime = 15 + 15* pounds;
    printf("cook for %d min\n",necessaryTime);
}

关键字“static”,译成中文就是“静态的”,所以内部函数又称静态函数。但此处“static”的含义不是指存储方式,而是指对函数的作用域仅局限于本文件。

使用内部函数的好处是:不同的人编写不同的函数时,不用担心自己定义的函数,是否会与其它文件中的函数同名,因为同名也没有关系。


static-函数内部定义静态变量

如下代码,

#include <stdio.h>
#include <stdlib.h>

static int factor = 14;

void showCookTimeForTurkey(int pounds){
    static int factor = 15; //在函数内部定义的静态变量,同样保存在静态存储区,不会随着函数帧退出栈而消失,生命周期为整个程序实例
    printf("the local static factor is %d\n",factor);
    int necessaryTime = factor + factor * pounds;//在当前函数作用域内定义有factor静态变量,不会使用在函数外部定义的同名的静态变量
    printf("cook for %d min\n",necessaryTime);
    factor++;
}

int main(int argc,const char * argv[]){
    printf("Hello, World!\n");
    
    showCookTimeForTurkey(12);
    showCookTimeForTurkey(12);
    showCookTimeForTurkey(12);
    
    printf("the static factor is %d\n",factor);
    return 0;
}

在函数内部定义静态变量很有意思,如上面代码注释说的。看一下输出打印,

Hello, World!

the local static factor is 15

cook for 195 min

the local static factor is 16

cook for 208 min

the local static factor is 17

cook for 221 min

the static factor is 14

Program ended with exit code: 0

参考:http://www.cnblogs.com/sideandside/archive/2007/03/29/692559.html

======END======

static用法

标签:

原文地址:http://my.oschina.net/xinxingegeya/blog/513221

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!