C语言static
2015-06-29 14:28
253 查看
static可以修饰函数为内部函数,只能在本文件中被调用,其他源文件不能声明调用该函数。
static修饰的全局变量只能在本源文件中访问,其他源文件不能使用。
static还可修饰局部变量为静态局部变量,保存到静态存储区,下次再调用该函数时可以保留上一次的调用结果。
a+len = 0+0=0 b+len=0+0=0
a+len = 0+1=1 b+len=0+1=1
a+len = 0+2=2 b+len=1+2=3
a+len = 0+3=3 b+len=3+3=6
a+len = 0+4=4 b+len=6+4=10
由于a使用auto修饰表示动态分配内存,每次调用函数时a的内存都是动态分配和释放的,每次都初始化为0
而b使用static修饰,表示存放在静态存储区,一直到main程序结束才释放内存,当函数调用结束时还是可以保留b的值。只在第一次初始化,下次使用上一次的计算结果。
虽然用static修饰b,但b还是局部变量,其他函数不能访问到b
可计算1+2+3+4+.....+n和1*2*3*4*....*n
static修饰的全局变量只能在本源文件中访问,其他源文件不能使用。
static还可修饰局部变量为静态局部变量,保存到静态存储区,下次再调用该函数时可以保留上一次的调用结果。
#include <stdio.h> void statictest1_1(int len){ auto int a = 0; static int b = 0; printf("a+len = %d+%d", a,len); a +=len; printf("=%d\t", a); printf("b+len=%d+%d", b,len); b +=len; printf("=%d\n", b); } static void statictest1_2(){ printf("static修饰的函数只能在本文件中被调用\n"); } void staticmain(){ for(int i=0; i < 5; i++){ statictest1_1(i); } }输出:
a+len = 0+0=0 b+len=0+0=0
a+len = 0+1=1 b+len=0+1=1
a+len = 0+2=2 b+len=1+2=3
a+len = 0+3=3 b+len=3+3=6
a+len = 0+4=4 b+len=6+4=10
由于a使用auto修饰表示动态分配内存,每次调用函数时a的内存都是动态分配和释放的,每次都初始化为0
而b使用static修饰,表示存放在静态存储区,一直到main程序结束才释放内存,当函数调用结束时还是可以保留b的值。只在第一次初始化,下次使用上一次的计算结果。
虽然用static修饰b,但b还是局部变量,其他函数不能访问到b
可计算1+2+3+4+.....+n和1*2*3*4*....*n
相关文章推荐
- 学习C++动态链接库基础知识 (主要关于QT项目)PART2
- boost::serialization学习笔记
- C++获取控制台输出
- C语言extern
- c/c++数组初始化误区
- C++关于二进制位操作小结
- LeetCode_Validate Binary Search Tree
- 黑马程序员-OC语言-函数和对象方法的区别(听课笔记)
- c++程序员经典面试题
- 黑马程序员-OC语言-#pragma mark指令的使用(听课笔记)
- C语言宏定义
- VC++ 自定义控件的建立及使用方法
- C++ CTreeview的checkbox使用方法
- c++正则表达式模板库GRETA的使用
- c++学习笔记4,调用派生类的顺序构造和析构函数(一个)
- VC++多线程编程
- 斐波那契数列-数组和递归-C语言
- (6)风色从零单排《C++ Primer》 结构体,头文件
- leetcode 日经贴,Cpp code -Majority Element II
- C++编译与链接-浅谈内部链接与外部链接