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

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);
}

有只小跳蛙
浏览 788回答 4
4回答

慕沐林林

include <stdio.h>int func(int x) //这个参数传得没有意义,传入后没有引用其值{int y=0;static int z=3;x=z++, y++; //','操作符,取最后一个表达式的结果为最终结果,即y++,由于y是局部变量,每次进入该函数y都会被初始化成0,又y++是先引用后自加,所以赋给x的是y的初始值0return(x); //返回始终为0}void main(){int a=2,i,b;for(i=0;i<2;i++) //循环3次,a每次加1b=func(a++); //前面说了,func的参数传入无意义,所以返回值与a的值无关,由于func始终返回为0,所以b始终为0printf("%d\n",b); //打印“0”}

侃侃无极

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

MMTTMM

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

千万里不及你

static变量z只初始化一次,所以for循环两次,第一次b等于z等于3,同时z++变为4,第二次循环时b等于4,同时z++变成5。由于,显示的是最后一次的b,所以最终结果为4
打开App,查看更多内容
随时随地看视频慕课网APP