C语言 问题 解释下。。运行结果怎么是8,17 8理解 17就纳闷了 自己算是15
发布网友
发布时间:2023-05-06 22:50
我来回答
共6个回答
热心网友
时间:2023-11-23 18:22
原因是函数func()中的变量m,和i是静态变量
(当函数执行一次后,静态变量会保存运行结果,当下次调用时,将会沿用上次的运行结果。)
也就是说,执行一次func()后,m=8,i=3;这样就使得第二次运行的结果为17。
静态变量的生存周期是整个源程序,即,当你关闭整个程序,重新打开运行时,变量会回到初始值;否则会保存运行的结果。
不知道我是否讲明白。
热心网友
时间:2023-11-23 18:22
第一个func是
m = 0, i = 2;
i = 2 + 0 + 1 = 3;
m = 3 + 4 + 1 = 8
第二次func是
m = 8, i = 3;
i = 3 + 8+ 1 = 12
m = 12+ 4 + 1 = 17
热心网友
时间:2023-11-23 18:23
1, 第一次调用 func: i = i + m + 1; 代入数就是 i = 2 + 0 + 1即3;
m = i + a + b;代入数就是m = 3 + 4 + 1 即8,所以第一次打印8;
1, 第二次调用 func: i = i + m + 1; 代入数就是 i = 3 + 8 + 1即12;
m = i + a + b;代入数就是m = 12 + 4 + 1 即17
热心网友
时间:2023-11-23 18:24
static如果你了解了你就明白了,
第一次进入func(),m未被初始化,所以初始化m,i,m=0,i=2
运行后i=3,m=8,
第二次进入func(),m已经被初始化,所以不再初始化m,i,m,i的值不变m=8,i=3
运行后i=12,m=17,
该变量在全局数据区分配内存;
未经初始化的静态全局变量会被程序自动初始化为0(自动变量的值是随机的,除非它被显式初始化);
静态全局变量在声明它的整个文件都是可见的,而在文件之外是不可见的;
热心网友
时间:2023-11-23 18:24
#include<stdio.h>
void main()
{
int func(int a,int b);
int k=4,m=1,p;
p=func(k,m);
printf("%d,",p); // p是8
p=func(k,m);
printf("%d\n",p); //p是17
}
int func(int a,int b)
{
static int m=0,i=2;
i=i+m+1; //第一次i是3 第二次i是12 第一次返回m
m=i+a+b; //第一次m是8 第二次m是17 第二次返回m
return m;
}
热心网友
时间:2023-11-23 18:25
m=0 i=2
i=2+0+1 =3
m=3+4+1=8
p=8
i=3+8+1=12
m=12+4+1=17
p=17
注意m和i 是static,第一次初始化以后,值就一直保留的
热心网友
时间:2023-11-23 18:22
原因是函数func()中的变量m,和i是静态变量
(当函数执行一次后,静态变量会保存运行结果,当下次调用时,将会沿用上次的运行结果。)
也就是说,执行一次func()后,m=8,i=3;这样就使得第二次运行的结果为17。
静态变量的生存周期是整个源程序,即,当你关闭整个程序,重新打开运行时,变量会回到初始值;否则会保存运行的结果。
不知道我是否讲明白。
热心网友
时间:2023-11-23 18:23
第一个func是
m = 0, i = 2;
i = 2 + 0 + 1 = 3;
m = 3 + 4 + 1 = 8
第二次func是
m = 8, i = 3;
i = 3 + 8+ 1 = 12
m = 12+ 4 + 1 = 17
热心网友
时间:2023-11-23 18:23
1, 第一次调用 func: i = i + m + 1; 代入数就是 i = 2 + 0 + 1即3;
m = i + a + b;代入数就是m = 3 + 4 + 1 即8,所以第一次打印8;
1, 第二次调用 func: i = i + m + 1; 代入数就是 i = 3 + 8 + 1即12;
m = i + a + b;代入数就是m = 12 + 4 + 1 即17
热心网友
时间:2023-11-23 18:24
static如果你了解了你就明白了,
第一次进入func(),m未被初始化,所以初始化m,i,m=0,i=2
运行后i=3,m=8,
第二次进入func(),m已经被初始化,所以不再初始化m,i,m,i的值不变m=8,i=3
运行后i=12,m=17,
该变量在全局数据区分配内存;
未经初始化的静态全局变量会被程序自动初始化为0(自动变量的值是随机的,除非它被显式初始化);
静态全局变量在声明它的整个文件都是可见的,而在文件之外是不可见的;
热心网友
时间:2023-11-23 18:24
#include<stdio.h>
void main()
{
int func(int a,int b);
int k=4,m=1,p;
p=func(k,m);
printf("%d,",p); // p是8
p=func(k,m);
printf("%d\n",p); //p是17
}
int func(int a,int b)
{
static int m=0,i=2;
i=i+m+1; //第一次i是3 第二次i是12 第一次返回m
m=i+a+b; //第一次m是8 第二次m是17 第二次返回m
return m;
}
热心网友
时间:2023-11-23 18:25
m=0 i=2
i=2+0+1 =3
m=3+4+1=8
p=8
i=3+8+1=12
m=12+4+1=17
p=17
注意m和i 是static,第一次初始化以后,值就一直保留的