C语言中静态存储类型问题
答案:6 悬赏:40 手机版
解决时间 2021-11-26 21:14
- 提问者网友:無理詩人
- 2021-11-26 02:57
C语言中静态存储类型问题
最佳答案
- 五星知识达人网友:独钓一江月
- 2021-11-26 04:16
C语言的数据区分为静态存储区与动态存储区。
静态存储是指在程序运行期间给变量分配固定存储空间的方式。如全局变量存放在静态存储区中,程序运行时分配空间,程序运行完释放。
动态存储是指在程序运行时根据实际需要动态分配存储空间的方式。如形式参数存放在动态存储区中,在函数调用时分配空间,调用完成释放。
静态存储是指在程序运行期间给变量分配固定存储空间的方式。如全局变量存放在静态存储区中,程序运行时分配空间,程序运行完释放。
动态存储是指在程序运行时根据实际需要动态分配存储空间的方式。如形式参数存放在动态存储区中,在函数调用时分配空间,调用完成释放。
全部回答
- 1楼网友:不想翻身的咸鱼
- 2021-11-26 06:46
有两个知识点需要知道:
1、静态变量与普通变量无二,区别在于静态变量始终占有内存,进出函数不会被改变,不消失。只在同一文件中能调用,其他文件无法调用。
在你的程序中,b的值取决于函数func中的z值,第一次循环进去函数func返回3,静态变量自加变为4,第二次循环返回4.
1、静态变量与普通变量无二,区别在于静态变量始终占有内存,进出函数不会被改变,不消失。只在同一文件中能调用,其他文件无法调用。
在你的程序中,b的值取决于函数func中的z值,第一次循环进去函数func返回3,静态变量自加变为4,第二次循环返回4.
- 2楼网友:怀裏藏嬌
- 2021-11-26 06:19
static变量z只初始化一次,所以for循环两次,第一次b等于z等于3,同时z++变为4,第二次循环时b等于4,同时z++变成5。由于,显示的是最后一次的b,所以最终结果为4
- 3楼网友:污到你湿
- 2021-11-26 06:07
include
int func(int x) //这个参数传得没有意义,传入后没有引用其值
{int y=0;
static int z=3;
x=z++, y++; //','操作符,取最后一个表达式的结果为最终结果,即y++,由于y是局部变量,每次进入该函数y都会被初始化成0,又y++是先引用后自加,所以赋给x的是y的初始值0
return(x); //返回始终为0
}
void main()
{int a=2,i,b;
for(i=0;i<2;i++) //循环3次,a每次加1
b=func(a++); //前面说了,func的参数传入无意义,所以返回值与a的值无关,由于func始终返回为0,所以b始终为0
printf("%d\n",b); //打印“0”
}
int func(int x) //这个参数传得没有意义,传入后没有引用其值
{int y=0;
static int z=3;
x=z++, y++; //','操作符,取最后一个表达式的结果为最终结果,即y++,由于y是局部变量,每次进入该函数y都会被初始化成0,又y++是先引用后自加,所以赋给x的是y的初始值0
return(x); //返回始终为0
}
void main()
{int a=2,i,b;
for(i=0;i<2;i++) //循环3次,a每次加1
b=func(a++); //前面说了,func的参数传入无意义,所以返回值与a的值无关,由于func始终返回为0,所以b始终为0
printf("%d\n",b); //打印“0”
}
- 4楼网友:洒脱疯子
- 2021-11-26 04:55
详解:
include //输入,输出函数的包含头文件
int func(int x) //一个整型函数,参数也为整型
{int y=0; //在该函数里面定义了一个整型变量y,并赋初值为0,
//当该函数每调用一次就重新定义一次,重新赋值一次,
//系统为y提供的是一个动态存储空间,当函数执行完,y变量的内存空间被释放
static int z=3; //定义了一个静态整型变量,并赋初值为3。当函数执行完后,它的值不变,
//若再次调 用该函数,它的值从4开始自加1
x=z++, y++; //z和y都自加1,但注意,这是一个逗号表达式,
//第一部分是“x=z++”,第二部分是“y++” 。
//优先级:“分号”最低,过了就是“逗号”, “赋值”要高于“逗号”。。。
//不好意思,刚才弄的太快了。。。嘿嘿
return(x); //将x作为返回值,返回给主调函数
}
void main() //程序的开始函数和结束函数
{int a=2,i,b; //定义了三个变量,并赋初始值a为2
for(i=0;i<2;i++) //进入for循环,执行i=0和i=1这两种情况下的循环体
b=func(a++); //调用func函数,以a的值作为实参传给func函数的形参,并且a要自加1,执行完后,函数的返回值赋值给变量b
printf("%d\n",b); //打印出b的值
}
include
int func(int x) //一个整型函数,参数也为整型
{int y=0; //在该函数里面定义了一个整型变量y,并赋初值为0,
//当该函数每调用一次就重新定义一次,重新赋值一次,
//系统为y提供的是一个动态存储空间,当函数执行完,y变量的内存空间被释放
static int z=3; //定义了一个静态整型变量,并赋初值为3。当函数执行完后,它的值不变,
//若再次调 用该函数,它的值从4开始自加1
x=z++, y++; //z和y都自加1,但注意,这是一个逗号表达式,
//第一部分是“x=z++”,第二部分是“y++” 。
//优先级:“分号”最低,过了就是“逗号”, “赋值”要高于“逗号”。。。
//不好意思,刚才弄的太快了。。。嘿嘿
return(x); //将x作为返回值,返回给主调函数
}
void main() //程序的开始函数和结束函数
{int a=2,i,b; //定义了三个变量,并赋初始值a为2
for(i=0;i<2;i++) //进入for循环,执行i=0和i=1这两种情况下的循环体
b=func(a++); //调用func函数,以a的值作为实参传给func函数的形参,并且a要自加1,执行完后,函数的返回值赋值给变量b
printf("%d\n",b); //打印出b的值
}
- 5楼网友:玩家
- 2021-11-26 04:49
楼主你好!
代码分析如下!
#include
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=0;i<2;i++) //循环两次
b=func(a++); //调用fun函数
printf("%d\n",b); //输出b的值
}
最终结果是输出4!
希望我的回答对你有帮助!有什么不清楚的,请继续追问!
代码分析如下!
#include
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=0;i<2;i++) //循环两次
b=func(a++); //调用fun函数
printf("%d\n",b); //输出b的值
}
最终结果是输出4!
希望我的回答对你有帮助!有什么不清楚的,请继续追问!
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯