C语言中的static和auto用法详解
在C语言中,我们可以使用static和auto关键字来定义变量。这两种关键字的使用场景是不同的,下面我们将分别进行详细讲解。
auto关键字
auto关键字可以用来定义函数内的局部变量,通过使用auto关键字,编译器会在编译时自动为变量分配存储空间。
下面是一个使用auto关键字的示例:
#include<stdio.h>
int main() {
auto int i = 10;
{
auto int i = 20;
printf("The value of inner 'i' is %d\n", i);
}
printf("The value of outer 'i' is %d\n", i);
return 0;
}
输出结果如下:
The value of inner 'i' is 20
The value of outer 'i' is 10
在上述示例中,我们定义了两个名为i的整型变量,它们都是通过auto关键字定义的。其中,第一个i变量的作用域是main函数,在第一个printf语句中输出它的值为10;第二个i变量的作用域是代码块作用域,在第二个printf语句中输出它的值为20。
static关键字
static关键字可以用来定义静态变量,也可以用来定义全局变量,它会影响变量的存储位置和作用域。
静态局部变量
在函数体内使用static关键字可以定义静态局部变量,这些变量的生命周期和全局变量类似,但作用域仅限于函数体内。
下面是一个使用静态局部变量的示例:
#include<stdio.h>
int foo() {
static int count = 0;
count++;
return count;
}
int main() {
int i;
for(i=0;i<5;i++) {
printf("the value of count is %d\n", foo());
}
return 0;
}
输出结果如下:
the value of count is 1
the value of count is 2
the value of count is 3
the value of count is 4
the value of count is 5
在上述示例中,我们定义了一个foo函数,并声明了一个名为count的静态局部变量。每次调用foo函数,count的值都会加1,并在函数体中输出count的值。在main函数中,我们循环调用foo函数5次,并输出count的值。
静态全局变量
在函数体外使用static关键字可以定义静态全局变量,这样的变量的作用域仅限于当前源文件,其他源文件无法访问。静态全局变量在程序运行期间始终存在,不会随着函数的退出而销毁。
下面是一个使用静态全局变量的示例:
#include<stdio.h>
static int count = 0;
void foo() {
count++;
}
int main() {
int i;
for(i=0;i<5;i++) {
foo();
printf("the value of count is %d\n", count);
}
return 0;
}
输出结果如下:
the value of count is 1
the value of count is 2
the value of count is 3
the value of count is 4
the value of count is 5
在上述示例中,我们定义了一个名为count的静态全局变量,并定义了一个名为foo的函数,每次调用foo函数都会将count加1,并在函数体中输出count的值。在main函数中,我们循环调用foo函数5次,并输出count的值。可以看出,count在函数调用之间保持了它的值,并且在其他源文件中无法被访问。
总结一下:使用auto关键字声明的函数内局部变量在函数调用结束时会被销毁,而使用static声明的函数内静态变量和静态全局变量在程序运行期间始终存在。这就是static和auto关键字的不同之处。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言中static和auto用法详解 - Python技术站