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======

时间: 2024-12-29 01:55:07

static用法的相关文章

java中静态代码块的用法 static用法详解

(一)java 静态代码块 静态方法区别一般情况下,如果有些代码必须在项目启动的时候就执行的时候,需要使用静态代码块,这种代码是主动执行的;需要在项目启动的时候就初始化,在不创建对象的情况下,其他程序来调用的时候,需要使用静态方法,这种代码是被动执行的. 静态方法在类加载的时候 就已经加载 可以用类名直接调用比如main方法就必须是静态的 这是程序入口两者的区别就是:静态代码块是自动执行的;静态方法是被调用的时候才执行的.静态方法(1)在Java里,可以定义一个不需要创建对象的方法,这种方法就是

JavaSE入门学习12: Java面相对象之static用法

我们可以基于一个类创建多个该类的对象,每个对象都拥有自己的成员,互相独立.然而在某些时候,我们更希 望该类所有的对象共享同一个成员.此时就是static大显身手的时候了. Java中被static修饰符修饰的成员称为静态成员或类成员.它属于整个类所有,而不是某个对象所有,即被类的所 有对象所共享.静态成员可以使用类名直接访问,也可以使用对象名进行访问.当然,鉴于他作用的特殊性更推荐用 类名访问. 使用static修饰符可以修饰变量.方法和代码块. 一Java中的static用法之静态变量 我们将

C/C++ static 用法总结

 static用法   a.静态局部变量,成为静态局部变量(拥有记忆功能和全局存储权限) b.静态全局变量(限制对应全局变量被被其他文件调用) c.静态函数 d.静态类成员(标识此成员属于类而非属于某个特定对象) 1.静态局部变量 1.1静态局部变量在函数内定义,拥有静态存储期限而不再是自动存储期限,因为静态存储期限的变量拥有永久的 存储单元,所以在整个程序存储期间都会保留变量的值,尽管退出函数后变量依然存在,但不能使用. 1.2静态局部变量始终拥有块作用域.(与自动变量作用域相同) 1.3

c语言中static 用法总结(转)

惨痛教训: 假设在test.h中定义了一个static bool g_test=false; 若test1.c和test2.c都包含test.h,则test1.c和test2.c分别生成两份g_test,在test1.c 中置g_test=true,而test2.c中仍然为false并未改变!shit!! 一.c程序存储空间布局 C程序一直由下列部分组成: 1)正文段——CPU执行的机器指令部分:一个程序只有一个副本:只读,防止程序由于意外事故而修改自身指令:      2)初始化数据段(数据段

C++ Primer 学习笔记_23_类与数据抽象(9)--四种对象生存期和作用域、static 用法总结

C++ Primer 学习笔记_23_类与数据抽象(9)--四种对象生存期和作用域.static 用法总结 前言: 从上图可知,程序占用的内存被分了以下几部分. (1).栈区(stack) 存放函数的参数值,局部变量的值等,内存的分配是连续的.栈上的内容只在函数的范围内存在,当函数运行结束,这些内容也会自动被销毁,其特点是效率高,但空间大小有限 注意:通常栈空间容量比较小,一般是1MB-2MB,所以体积比较大的对象不适合在栈中分配. (2).堆区(heap) 由malloc系列函数或new操作符

static用法总结

C++的static有两种用法:面向过程程序设计中的static和面向对象程序设计中的static.前者应用于普通变量和函数,不涉及类:后者主要说明static在类中的作用. 一.面向过程设计中的static1.静态全局变量 2.静态局部变量 3.静态函数 二.面向对象的static关键字(类中的static关键字) 1.静态数据成员 2.静态成员函数 一.面向过程设计中的static 1.静态全局变量 参见代码: 静态全局变量特点: 1)该变量在全局数据区分配内存:(具体参见http://ww

java中静态代码块的用法 static用法详解和static静态导入

(一)java 静态代码块 静态方法区别一般情况下,如果有些代码必须在项目启动的时候就执行的时候,需要使用静态代码块,这种代码是主动执行的;需要在项目启动的时候就初始化,在不创建对象的情况下,其他程序来调用的时候,需要使用静态方法,这种代码是被动执行的. 静态方法在类加载的时候 就已经加载 可以用类名直接调用比如main方法就必须是静态的 这是程序入口两者的区别就是:静态代码块是自动执行的;静态方法是被调用的时候才执行的. 静态方法(1)在Java里,可以定义一个不需要创建对象的方法,这种方法就

C++中static用法总结

转自:http://blog.csdn.net/hackbuteer1/article/details/7487694 C++的static有两种用法:面向过程程序设计中的static和面向对象程序设计中的static.前者应用于普通变量和函数,不涉及类:后者主要说明static在类中的作用.一.面向过程设计中的static1.静态全局变量在全局变量前,加上关键字static,该变量就被定义成为一个静态全局变量.我们先举一个静态全局变量的例子,如下: 1 #include<iostream>

【C++初级】static用法总结、问题探讨及常见错误排查

static的基本用法: static的作用主要有两种第一个作用是限定作用域:第二个作用是保持变量内容持久化: 一.c语言中static的用法: 1.全局静态变量: 用法:在全局变量前加上关键字static,全局变量就定义成一个全局静态变量. static int temp: 内存中的位置:静态存储区 生命周期:在整个程序运行期间一直存在. 初始化:未经初始化的全局静态变量会被自动初始化为0(自动对象的值是任意的,除非他被显式初始化): 作用域:全局静态变量在声明他的文件之外是不可见的,准确地说

java中静态代码块的用法—— static用法详解

(一)java 静态代码块 静态方法区别一般情况下,如果有些代码必须在项目启动的时候就执行的时候,需要使用静态代码块,这种代码是主动执行的;需要在项目启动的时候就初始化,在不创建对象的情况下,其他程序来调用的时候,需要使用静态方法,这种代码是被动执行的. 静态方法在类加载的时候 就已经加载 可以用类名直接调用比如main方法就必须是静态的 这是程序入口两者的区别就是:静态代码块是自动执行的;静态方法是被调用的时候才执行的. 静态方法(1)在Java里,可以定义一个不需要创建对象的方法,这种方法就