发布网友 发布时间:2022-04-23 19:34
共3个回答
热心网友 时间:2023-10-03 07:25
第一个x=3是全局变量,第二个static int x是局部变量,第二个x的作用于为incre()函数里面,也就是说,若在incre()函数外面,x的值恒为3(因为除了incre()函数外没有修改x的值的语句),所以循环只执行2次,第一次是全局x=1时,第二次是全局x=2时。
那么现在说说这两次循环:
第一次循环:
全局x=1,符合循环条件,进入循环,这里要说明一下,变量的值为离该变量位置最近的声明或定义的值,也就是说,第一次执行incre()函数的时候x的值为1,而不是3,接下来x*=x+1后,x=2,然后输出x的值2,然后跳出函数,x++;
第二次循环:
x的值变为2,因为x不在incre()函数的作用域内,所以此时的x是全局变量x,2<3,好,符合条件,再次进入循环,此时x在incre()函数的作用域内了,所以x是stati的x,注意:static是“静态局部变量”,也就是说,x的值是它上一次留下来的值:2,接下来执行x*=x+1后,x=6,然后输出x的值6,跳出函数;
接下来的的x又变成了全局变量x,即值又变成了2,然后x++,x=3,不符合循环条件,结束循环。
结果 2 6
累死了。。。
热心网友 时间:2023-10-03 07:26
#include<stdio.h>
int x=3;//定义全局变量i,在本程序内有效
incre();//incre()函数声明
main()
{
int i;//定义局部变量i,在主函数内有效
for (i=1;i<x;i++)//循环两次,i=1时和i=2时
incre();
//因为循环只有两次,相当于以下语句
/*
incre();
执行这个函数调用语句时,
操作有:为静态变量x分配内存空间,并初始化1
x=x*(x+1) 得到静态变量x为2
输出2
incre();
执行这个函数调用语句时,
操作有:
x=x*(x+1) 相当于x=2*(2+1) 得到静态变量x为6
输出6
*/
}
incre()
{
static int x=1;//定义静态变量x,也是本程序内有效,且只初始化一次
x*=x+1;//相当于x=(x)*(x+1)
printf(" %d",x);//输出(static int)x的值
}
//希望能够帮助到你,不懂的可追问哦
热心网友 时间:2023-10-03 07:26
#include "stdio.h"
int x=3;//没有作用的全局变量,可以不要
incre();
main()
{
int i;
for(i=1;i<x;i++)
incre();
}
incre()
{
static int x=1;x*=x+1;//x=x*(x+1) 这里将x定义为静态变量并进行初始化
printf(" %d",x);
}
//输出 2 6
//1:x=1*(1+1)=2
//2:x=2*(2+1)=6