为了账号安全,请及时绑定邮箱和手机立即绑定

C语言中静态存储类型问题

C语言中静态存储类型问题

C
有只小跳蛙 2019-03-23 15:15:00
include <stdio.h>int func(int x){int y=0;static int z=3;x=z++, y++;return(x);}void main(){int a=2,i,b;for(i=0;i<2;i++)b=func(a++);printf("%d\n",b);}
查看完整描述

4 回答

?
慕沐林林

TA贡献2016条经验 获得超9个赞

include <stdio.h>
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”
}


查看完整回答
反对 回复 2019-03-24
?
侃侃无极

TA贡献2051条经验 获得超10个赞

有两个知识点需要知道:
1、静态变量与普通变量无二,区别在于静态变量始终占有内存,进出函数不会被改变,不消失。只在同一文件中能调用,其他文件无法调用。
在你的程序中,b的值取决于函数func中的z值,第一次循环进去函数func返回3,静态变量自加变为4,第二次循环返回4.

查看完整回答
反对 回复 2019-03-24
?
MMTTMM

TA贡献1869条经验 获得超4个赞

C语言的数据区分为静态存储区与动态存储区。
静态存储是指在程序运行期间给变量分配固定存储空间的方式。如全局变量存放在静态存储区中,程序运行时分配空间,程序运行完释放。
动态存储是指在程序运行时根据实际需要动态分配存储空间的方式。如形式参数存放在动态存储区中,在函数调用时分配空间,调用完成释放。

查看完整回答
反对 回复 2019-03-24
?
千万里不及你

TA贡献1784条经验 获得超9个赞

static变量z只初始化一次,所以for循环两次,第一次b等于z等于3,同时z++变为4,第二次循环时b等于4,同时z++变成5。由于,显示的是最后一次的b,所以最终结果为4

查看完整回答
反对 回复 2019-03-24
  • 4 回答
  • 0 关注
  • 786 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信