比如这个代码:
任意给定2个整数a,b,计算a+b,a*b,a%b
#include<stdio.h>
int *arithmetic(int a,int b)
{
static int result[3];
result[0]=a+b;
result[1]=a*b;
result[2]=a%b;
return result;//返回数组地址
}
int main()
{
int *p;
int a,b,i;
scanf("%d %d",&a,&b);
p=arithmetic(a,b);
for(i=0;i<3;i++)
printf("%d ",*(p+i));
return 0;
}
对于代码中出现的static,这里需要用static修饰,因为函数中的局部变量是存放在栈中,函数执行完之后自动释放,因此不应将局部变量的指针作为返回值,但加上static修饰就可以,因为static对栈变量的修饰,可以认为栈变量的生命周期延长到程序执行结束时。一般来说,栈变量的生命周期由OS管理,在退栈的过程中,栈变量的生命也就结束了。但加入static修饰之后,变量已经不再存储在栈中,而是和全局变量一起存储。同时,离开定义它的函数后不能使用,但如再次调用定义它的函数时,它又可继续使用, 而且保存了前次被调用后留下的值。
我们可以再看一个例子:
#include<stdio.h>
void fun()
{
int i=0;
static int j=0;
printf("i=%d\n",i);
printf("j=%d\n",j);
i++;
j++;
printf("\n");
}
int main()
{
int n;
for(n=0;n<3;n++)
fun();
return 0;
}
运行结果如下: