静态变量、局部变量与全局变量详解
来源:互联网 发布:粉多多类似软件 编辑:程序博客网 时间:2024/05/01 02:23
在网上看到一篇对静态变量、局部变量与全局变量的讲解,感觉解释的很清晰~保留后用。
最近重拾C++,学习到这几个概念,涉及到堆栈的调用、分配等等,在这里重新整理下,希与各位互相讨论学习。
静态数据成员在程序中只有一份复制品,由该类型的所有对象共享访问。非静态数据成员则不然,每个类对象都有自己的复制品。
类的静态成员必须初始化。如果静态成员是个类,那么就会调用它的构造函数。
静态成员函数为类的全部服务而不是为某一个类的具体对象服务。静态成员函数由于不是与任何的对象相联系,因此它不具有this指针。
#include<stdio.h>
void
fun(
int
i)
{
static
int
value=i++;
printf
(
"%d\n"
,value);
}
int
main()
{
fun(0);
fun(1);
fun(2);
return
0;
}
程序输出为
0
0
0
#include<stdio.h>
void
fun(
int
i)
{
static
int
value=i++;
value=i++;
printf
(
"%d\n"
,value);
}
int
main()
{
fun(0);
fun(1);
fun(2);
return
0;
}
程序输出为
1
1
2
注解:
static变量只初始化一次,具有“记忆”功能,与源程序“同生死,共存亡”。
auto变量存放在栈区,调用结束立刻被销毁。
在头文件中定义静态变量 ,会浪费空间或者引起程序错误。因为若每个C语言文件都使用了该头文件,则在每个头文件中会单独列出一个静态变量。
不包含全局变量定义的源文件需要用extern关键字再次声明这个全局变量。
全局变量、静态局部变量与静态全局变量都在静态存储区分配空间,而局部变量在栈上分配空间。
全局变量具有全局作用域,静态变量具有稳健作用域。
静态局部变量具有局部作用域,只被初始化一次。静态全局变量具有文件作用域,如果一个程序包含多个文件,只对声明静态全局变量的文件生效。
#include<stdio.h>
static
int
j;
int
k=0;
int
m;
void
fun1()
{
static
int
i=0;
i++;
m=i;
}
void
fun2()
{
j=0;
//如果没有此行的初始化,j的值最后也会变为10
j++;
}
int
main()
{
for
(k=0;k<10;k++)
{
fun1();
fun2();
}
printf
(
"%d\n"
,m);
printf
(
"%d\n"
,j);
return
0;
}
注解:
i为静态局部变量,只被初始化一次。
j是静态全局变量,每次函数调用的时候都被初始化。
全局变量只定义未初始化默认为0;
局部变量只定义未初始化,若是int类型,则默认的是-858993460,即0xcccccccc。
#include<stdio.h>
int
my(
const
int
a)
{
static
int
count=a;
return
count + a;
}
int
main()
{
printf
(
"%d\n%d\n"
,my(4),my(5));
return
0;
}
程序输出结果入如下:
9
10
注解:
printf函数总是从列表变量的右端开始计算压栈,再从左到右对应弹出栈。
局部变量可以与全局变量重名,但是局部变量会屏蔽全局变量。要使用全局变量,需要使用操作法::。
#include<stdio.h>
int
i=1;
int
main()
{
int
i=i;
printf
{
"%d\n"
,i);
return
0;
}
程序输出结果:
-858993460
注解:
main函数里面定义的i会屏蔽掉全局变量i,致使定义的i=它本身,所以会输出一个随机值。
本文出自 “大白菜” 博客,请务必保留此出处http://zhengyongkun.blog.51cto.com/1163218/1250019
- 静态变量、局部变量与全局变量详解
- Python 全局变量、局部变量、静态变量 详解
- 局部变量、全局变量、静态变量
- 局部变量, 全局变量, 静态变量
- 局部变量、全局变量、静态变量
- 静态变量,局部变量,全局变量
- 局部变量、全局变量、静态变量
- 静态变量,局部变量,全局变量
- 全局变量 局部变量 静态变量
- 全局变量,局部变量,静态变量
- 全局变量、局部变量、静态变量
- 局部变量、全局变量、静态变量
- 全局变量,静态变量,局部变量
- 全局变量、局部变量、静态变量
- 局部变量,全局变量,静态全局变量
- 静态局部变量,静态全局变量
- 局部变量 局部静态变量 全局变量
- 全局变量与局部变量
- 【神经网络学习笔记】PID神经元网络解耦控制算法
- HDU 2486 HDU2580 POJ3922 a simple stone game
- instance method '*****' not found (return type defaults to 'id')
- UVa703 - Triple Ties: The Organizer's Nightmare
- MediaWiki数据库表
- 静态变量、局部变量与全局变量详解
- CentOS6.3配置yum源
- java WeakHashMap详细介绍(源码解析)和使用示例
- 定时熄灭屏幕的方法
- windbg转储文件
- JSP中的include有哪些?有什么区别?
- 请教用fvcom3.1.6的同志们,需要你们的帮助,谢谢!
- SQL函数大全
- mod_jk下载