c prime plus 得内存,储存类,链接的后记1static
来源:互联网 发布:js slice和substring 编辑:程序博客网 时间:2024/06/10 20:49
储存时期:
一个c变量的储存时期为:
1:静态储存时期
(该变量可在程序执行期间一直存在);
例如:全局变量(具有文件作用域)
对于static这个关键词来讲:
他表明链接的类型,而非储存时期
(对于文件作用域变量,无论他具有内部链接
还是外部链接,都具有静态储存时期。对于用static
声明的文件作用域变量只有内部链接)
2:自动储存时期
(该变量只在 他所在的代码块起作用);
例如:自动变量(具有代码块作用域)
void func(int a);
int giants=0;
int main(int argc,char const* argv[])
{int giant=5;
giant=func(giant);
printf("giant=%d\n",giant);
giant=func(giant);
printf("giant=%d",giant);
return 0;
}
int func(int a){
static int a=2;
a++;
return a;
}
输出:giant=3
giant=4;
因为static所声明得变量只定义一次(文件作用域)
不会重复声明
(所以对函数参量不能使用static声明)// c语言也不允许
那么问题来了?
1static只定义一次,为什么?
2计算机又是如何实现的呢?
解:
1:static如上文所提,拥有文件作用域,而拥有文件
作用域的变量定义时(就如同你定义一个全局变量)时的心理。
你懂得。。。只要一次足矣,等你爱我(有点跑题,请原谅)
2:计算机在内存中此变量的地址后面加上一点标志就可以了。
例如:
......................
int number=5;
int i;
int* p;
for (i=8; i > 0; i--)
{
static int n=number;
p=&n;//把n的地址赋给p
p++;//使p指向p的后面(4个字节后)的地址
*p=0;//把那里的值改为0
//对于不同的位数计算机你可以
//使用地址逐一访问,来寻找那个标志
//come have a try
n++;
printf("%d",n);
}
.......................
输出:66666666
其实C语言的很多东西都是用0,1来识别的
如最简单的if中判断,bool常量中的FLASE与TRUE。。
(还望各路人杰多多补充说明!)
- c prime plus 得内存,储存类,链接的后记1static
- c prime plus 的内存,储存,链接
- C Primer Plus 第十二章:储存类别,链接和内存管理
- C 语言的储存类和链接
- c prime plus的副作用
- c prime plus的笔记
- c语言变量的作用域,链接属性,储存类型&&static关键字
- C primer plus 学习之存储类、链接、内存管理
- 读《C Prime Plus》有感1——C动态链表释放内存问题
- C储存类,链接和内存管理学习总结和心得
- c prime plus第八章
- c prime plus 第十二章
- C Prime Plus第十三章
- 【C Primer Plus】第十二章 存储类、链接和内存管理
- C primer plus第12章(存储类、链接和内存管理)
- C primer plus第12章(存储类、链接和内存管理)习题
- C Primer Plus第12章 存储类、链接和内存管理随笔
- C Primer Plus 第12章 存储类、链接和内存管理
- 49.给定的字符串中找出小于97的字符存入数组中并输出
- 杯具,万达电商又换CEO
- Wireshark抓包介绍和TCP三次握手分析
- memcache读书笔记(二)
- Problem D: [NOIP2008]传纸条 T3
- c prime plus 得内存,储存类,链接的后记1static
- JAVA_OPTS
- 佛祖保佑 永无bug
- Oracle shutdown immediate无法关闭数据库解决方法
- scala实现1-100内的奇数的平方和
- mysql 添加某个ip 允许访问
- Apache HTTP服务器安装后报:无法启动,因为应用程序的并行配置不正确-(已解决)
- 服务中onStartCommand方法返回值的作用
- Problem E: [HNOI2004]打鼹鼠 D1 T1