变量的存储方式可分为:“静态存储”和“动态存储”两种。
静态存储庆亮野变量通常是在变量定义时就分定存储单元并一直保持不变,直至整个程序结束。
全局变量即属于此类存储方式。
动态存储变量是在程序执行过程中,使用它时才分配存储单元,使用完毕立即释放。
典型的例子是函数的形式参数,在函数定义时并不给行参分配存储单元,只是在函数被调用时,才予以分配,调用函数完毕立即释放。
如果一个函数被多次调用时,则反复地分配、释放形参变量的存储单元。
静态存储变量是一直存在的,而动态存储变量则时而存在时而消失。通常把由于变量存储方式不同而产生的特性称为变量的生存期。
生存期表示了变量存在的时间,生存期和作用域时从时间和空间这两个不同的角度来描述变量的特性,这两者即有联系,又有区别。
一个誉喊变键谈量究竟属于哪一种存储方式,并不能仅从其作用域来判断,还应有明确的存储类型说明。
楼主你好!代码分析如下!
#include <stdio.h>
int func(int x)
{int y=0
static int z=3 //简孝此处是静态变量,静态变量直到整个程序运行完才释放,局部变量则是执行完该段函数后就释放,这里的y,就是跟例子,所拦迟稿以每次运行fun函数y都是0,然后y++后为1,而z则不同,由于for循环执行了两次,第一次z++后为4,第二次z++后为5
x=z++,y++//这里虽然是逗号表达,但是=的运算优先级是大于逗号的,所以,x实际上第一次循环是被赋予3,第二次是赋予了4,估计很多人会误认为x是取到y的值,实际上错误的!
return(x)
}
int main()
{int a=2,i,b
for(i=0i<2i++) //循环两次
b=func(a++) //调用fun函数
printf("%d\n",b) //输出b的值
}
最终结果是输出旦差4!
希望我的回答对你有帮助!有什么不清楚的,请继续追问!
晒晒静态的内存使用的是栈空间内存,不用程序员自己来分配.动态内存由程序员根据需要来自己分配并收回.
最大的区别在于动态的内存分配时候会用new关键字或malloc或calloc函数,之所渣滑以要程序员自己来分配内存是由于有时候不能确定程序要使用多少内存,比如要通过用户或旁此者文件或者数据库中的查询结果来确定使用多少数据,这时候如启腊程序员无法在程序的编写的时候就把内存给固定分配出来.这时候必须得让程序在运行的时候自己来为自己找到可用的内存,就一定要用动态的方式来分配内存.
举个例子,根据用户的输入一个整数来确定用户要输入的数组维数,这个整数不是一定确定的数值,我们可以用一个变量n来表示,并用它接受用户的输入,再根据n来生成一个整数数组.程序不能写成int
array[n]的形式,这样程序是不能编译通过的,这是因为n是一个不确定的数值.只能用new或malloc来通过用户的输入来分配内存.可以写成这样:
int
n
cout
<<
"input
n:"
cin
>>
n
cout
<<
endl
int*
iArray
=
new
int[n]
for
(int
i
=
0
i
<
n
i++)
{
cin
>>iArray[i]
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)