C语言中的静态局部变量

代码:

 1 0x601070 0x7ffcf44243fc
 2 0x60106c
 3 1
 4 0x60106c
 5 2
 6 0x60106c
 7 3
 8 [[email protected] test]$ cat test.cpp
 9 #include <iostream>
10 #include <string>
11 #include <cstdio>
12
13 using namespace std;
14
15 void func(){
16     static int a = 1;
17     cout<<&a<<endl;
18     cout<<a<<endl;
19     a++;
20 }
21
22 int main(){
23     static int a = 1;
24     int b = 1;
25     cout<<&a<<" "<<&b<<endl;
26     func();
27     func();
28     func();
29
30     return 0;
31 }

输出:

0x601070 0x7ffcf44243fc
0x60106c
1
0x60106c
2
0x60106c
3

说明:

静态局部变量存储在全局区,全局变量、静态局部变量、静态全局变量都在静态存储区分配空间。

时间: 2024-10-27 14:21:33

C语言中的静态局部变量的相关文章

C语言中全局变量、局部变量、静态全局变量、静态局部变量的区别 (转)

1.C++变量根据定义的位置的不同的生命周期,具有不同的作用域,作用域可分为6种: 全局作用域,局部作用域,语句作用域,类作用域,命名空间作用域和文件作用域. 从作用域看: 1>全局变量具有全局作用域.全局变量只需在一个源文件中定义,就可以作用于所有的源文件.当然,其他不包含全局变量定义的源文件需要用extern 关键字再次声明这个全局变量. 2>静态局部变量具有局部作用域,它只被初始化一次,自从第一次被初始化直到程序运行结束都一直存在,它和全局变量的区别在于全局变量对所有的函数都是可见的,而

通过静态局部变量看C,C++,C#,Java,PHP的特点

0 问题由来 对这个问题的思考来自于面向对象设计中的单例设计模式的实现. C++中单例模式实现标准代码为: #include <stdio.h> int init() { printf("init()\n"); return 22; } int GetTheOnly() { static int x = init(); return x; } int main() { int only = GetTheOnly(); return 0; } 在获取实例函数GetTheOnl

C++中关于[]静态数组和new分配的动态数组的区别分析

这篇文章主要介绍了C++中关于[]静态数组和new分配的动态数组的区别分析,很重要的概念,需要的朋友可以参考下 本文以实例分析了C++语言中关于[]静态数组和new分配的动态数组的区别,可以帮助大家加深对C++语言数组的理解.具体区别如下: 一.对静态数组名进行sizeof运算时,结果是整个数组占用空间的大小:因此可以用sizeof(数组名)/sizeof(*数组名)来获取数组的长度.int a[5]; 则sizeof(a)=20,sizeof(*a)=4.因为整个数组共占20字节,首个元素(i

C语言中存储类别又分为四类:自动(auto)、静态(static)、寄存器的(register)和外部的(extern)。

除法运算中注意: 如果相除的两个数都是整数的话,则结果也为整数,小数部分省略,如8/3 = 2:而两数中有一个为小数,结果则为小数,如:9.0/2 = 4.500000. 取余运算中注意: 该运算只适合用两个整数进行取余运算,如:10%3 = 1:而10.0%3则是错误的:运算后的符号取决于被模数的符号,如(-10)%3 = -1;而10%(-3) = 1. -- 1.  用关键字auto定义的变量为自动变量,auto可以省略,auto不写则隐含定为"自动存储类别",属于动态存储方式

C/C++语言变量问题(全局变量、局部变量、静态全局变量、静态局部变量)

1.C/C++变量根据定义的位置的不同的生命周期,具有不同的作用域,作用域可分为6种: 全局作用域,局部作用域,语句作用域,类作用域,命名空间作用域和文件作用域. 从作用域看: 1>全局变量具有全局作用域.全局变量只需在一个源文件中定义,就可以作用于所有的源文件.当然,其他不包含全局变量定义的源文件需要用extern 关键字再次声明这个全局变量. 2>静态局部变量具有局部作用域,它只被初始化一次,自从第一次被初始化直到程序运行结束都一直存在,它和全局变量的区别在于全局变量对所有的函数都是可见的

C++中的全局变量、普通局部变量和静态局部变量的区别

在C++中,我们经常难以说清楚全局变量.局部变量和静态局部变量的区别.本博客从变量存储特性和标识符作用域两个角度区分这三个变量. 首先,我们来看看C++程序的内存区域是如何分配的. 从上图,我们可以看到,C++程序的内存区域分为代码区.全局数据区.堆区和栈区.其中,全局变量和静态局部变量存放在全局数据区,这两个变量在程序开始时就已经分配和初始化存储空间了.而普通局部变量存放在栈区,它在程序进入声明的代码块时生成,在结束代码块时删除. 其次,从标识符作用域的角度,我们可以认为: 1. 全局变量和静

C语言中静态库和动态库笔记

库 库,故名思议,是存放东西的地方,其中存放的东西可以被多个人公用. 程序中借用库的概念,描述将代码进行抽取,这种代码被大多数程序使用, 其过程具有一定的模块化.封装.抽象的特征. 按照库的使用方式, 静态库 和 动态库. 不管怎样方式使用, 首先库的概念体现出代码逻辑上公共抽象. 有篇博文,做了介绍, 并有例子, 本文纯粹学习,借鉴了其中的例子. http://www.cnblogs.com/chio/archive/2007/11/03/948480.html 静态库 静态库,编译应用程序的

Java中的静态变量、实例变量和局部变量及其特征

变量类型 说明 特征 类变量(静态变量) 独立于方法之外的变量,用   static 修饰 类变量也称为静态变量,在类中以static关键字声明,但必须在方法构造方法和语句块之外.     无论一个类创建了多少个对象,类只拥有类变量的一份拷贝.     静态变量除了被声明为常量外很少使用.常量是指声明为public/private,final和static类型的变量.常量初始化后不可改变.     静态变量储存在静态存储区.经常被声明为常量,很少单独使用static声明变量.     静态变量在

理解静态局部变量(static)在程序中的执行规则

#include "stdio.h" /*目的: 认识静态局部变量 static !!!*/ int f(int a) { auto b = 0; static int c = 3; b = b + 1; c = c + 1; printf("\tc = %d\t",c ); return(a + b + c); } int main() { int a = 2, i; for (i = 0; i < 3; i++) { printf("f(a) =