在c语言中,程序运行是直接运行主函数的,其他的函数都是在被调用的时候才会运行。那么在运行被调用函数之前就要知道这个函数相关信息,如函数名,返回值类型,函数参数等信息。若没有这些信息时,就会显示该函数未定义,此时只链晌汪要在调用该函数的函数前面加上函数的申明即可。就是上面那位朋棚仔友的说法了。
#include <stdio.h>
int main()
{
int k = 4, m = 1, p
p = func (k, m)
扮亏逗 printf("p = %d\n" , p)
p = func(k, m)
printf("p = %d\n" , p)
return 0
}
int func(int a, int b)
{
static int m,i=2
printf("m = %d, i = %d\n" , m, i)
i += m+1
printf("i = %d," ,i)
m = i+a+b
printf("m = %d\n" ,m)
return(m)
}
先说两件事
这两张图片治好了我的颈椎病
static int m, i=2
这里面m的值没有初始化, 这应该是不应该的, 我敢说题有问题
根据上面的打印, 可以看出我的编译器将m的初始值定为0
为了区别两个m, 下面将main()里面定义的m写为大写M
第一次func, 输入值a = k = 4, b = M = 1
i = i + m + 1 = 2 + 0 + 1 = 3
m = i + a + b = 3 + 4 + 1 = 8
第一次func, 输入值a = k = 4, b = M = 1
i = i + m + 1 = 3 + 8 + 1 = 12
m = i + a + b = 12 + 4 + 1 = 17
这题主要考的就是全局变量局部变量区别, 静态变量与非厅卖静态变量的区别
在func里面定义的m作用域就在func函数里面,
在main()函数里面出现相同的变量m作用域是在main()函数里, 有区别
static类型的静态变量有个特点, 就是只初始化一次
第一次空念调用func() 将m, i 的数值初始化了,
并且经过运算最总 m =8, i = 3
第二次调用func()的时候m, i的数值不再次初始化, 依然是以前的数值 8, 3
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)