今天一起来分析C语言,static关键字的用法。

static的用法
static关键字定义该变量为静态变量。
1、全局静态变量
如果定义为全局变量的静态变量,则和全局变量完全相同,只是静态全局变量只能在该.c文件中使用。而全局变量在同一个工程文件中可以被多个.c文件使用。
在全局变量前,加上关键字static,该变量就被定义成为一个静态全局变量。我们先举一个静态全局变量的例子,如下:
#include <stdio.h>
#define uchar unsigned char
uchar i;
static int n=0;
uchar niu[9]={1,3,6,9,5,20,100,12};
int led(char x);
main()
{
for(i=0;i<3;i++)
{
n=n+1;
led(n);
}
}
int led(char x)
{
n=niu[x]; //3,5,100
printf("%d\t",n);
return n;
}
执行完程序后,输出n的结果为3,5,100。
全局变量和全局静态变量的区别
1.1、全局变量是没有用static修饰的全局变量,全局变量默认是有外部链接性的,作用域是整个工程,在一个文件内定义的全局变量,在另一个文件中,通过extern 全局变量名的声明,就可以使用全局变量。
1.2、全局静态变量是显式用static修饰的全局变量,作用域是声明此变量所在的文件,其他的文件即使用extern声明也不能使用。
2、局部静态变量
一般情况下,在函数体内定义了一个变量,每当程序运行到该语句时都会给该局部变量分配栈内存。但随着程序退出函数体,系统就会收回栈内存,局部变量也相应失效。
但有时候,我们需要在两次调用之间对变量的值进行保存。
通常的想法是定义一个全局变量来实现。但这样一来,变量已经不再属于函数本身了,不再仅受函数的控制,给程序的维护带来不便。静态局部变量正好可以解决这个问题。
静态局部变量保存在全局数据区,而不是保存在栈中,每次的值保持到下一次调用,直到下次赋新值。
静态局部变量有以下特点:
2.1、该变量在全局数据区分配内存;
2.2、静态局部变量在程序执行到该对象的声明处时被首次初始化,即以后的函数调用不再进行初始化。
2.3、静态局部变量今天一起来分析C语言,static关键字的用法。

static的用法
static关键字定义该变量为静态变量。
1、全局静态变量
如果定义为全局变量的静态变量,则和全局变量完全相同,只是静态全局变量只能在该.c文件中使用。而全局变量在同一个工程文件中可以被多个.c文件使用。
在全局变量前,加上关键字static,该变量就被定义成为一个静态全局变量。我们先举一个静态全局变量的例子,如下:
#include <stdio.h>
#define uchar unsigned char
uchar i;
static int n=0;
uchar niu[9]={1,3,6,9,5,20,100,12};
int led(char x);
main()
{
for(i=0;i<3;i++)
{
n=n+1;
led(n);
}
}
int led(char x)
{
n=niu[x]; //3,5,100
printf("%d\t",n);
return n;
}
执行完程序后,输出n的结果为3,5,100。
全局变量和全局静态变量的区别
1.1、全局变量是没有用static修饰的全局变量,全局变量默认是有外部链接性的,作用域是整个工程,在一个文件内定义的全局变量,在另一个文件中,通过extern 全局变量名的声明,就可以使用全局变量。
1.2、全局静态变量是显式用static修饰的全局变量,作用域是声明此变量所在的文件,其他的文件即使用extern声明也不能使用。
2、局部静态变量
一般情况下,在函数体内定义了一个变量,每当程序运行到该语句时都会给该局部变量分配栈内存。但随着程序退出函数体,系统就会收回栈内存,局部变量也相应失效。
但有时候,我们需要在两次调用之间对变量的值进行保存。
通常的想法是定义一个全局变量来实现。但这样一来,变量已经不再属于函数本身了,不再仅受函数的控制,给程序的维护带来不便。静态局部变量正好可以解决这个问题。
静态局部变量保存在全局数据区,而不是保存在栈中,每次的值保持到下一次调用,直到下次赋新值。
静态局部变量有以下特点:
2.1、该变量在全局数据区分配内存;
2.2、静态局部变量在程序执行到该对象的声明处时被首次初始化,即以后的函数调用不再进行初始化。
2.3、静态局部变量一般在声明处初始化,如果没有显式初始化,会被程序自动初始化为0;
2.4、它始终驻留在全局数据区,直到程序运行结束。但其作用域为局部作用域,当定义它的函数或语句块结束时,其作用域随之结束。
局部变量和局部静态变量的区别
局部变量,作用域仅限该函数体,函数体执行完,该变量占用的内存空间就被释放。
如果定义为局部静态变量,作用域和局部变量完全相同,但该局部变量占用的内存不会被优化,会一直存在。
定义为局部静态变量,没有赋值,默认为0。它限定一个变量,其值不允许被改变,产生静态作用。一般在声明处初始化,如果没有显式初始化,会被程序自动初始化为0;
2.4、它始终驻留在全局数据区,直到程序运行结束。但其作用域为局部作用域,当定义它的函数或语句块结束时,其作用域随之结束。
局部变量和局部静态变量的区别
局部变量,作用域仅限该函数体,函数体执行完,该变量占用的内存空间就被释放。
如果定义为局部静态变量,作用域和局部变量完全相同,但该局部变量占用的内存不会被优化,会一直存在。
定义为局部静态变量,没有赋值,默认为0。它限定一个变量,其值不允许被改变,产生静态作用。

static的用法
static关键字定义该变量为静态变量。
1、全局静态变量
如果定义为全局变量的静态变量,则和全局变量完全相同,只是静态全局变量只能在该.c文件中使用。而全局变量在同一个工程文件中可以被多个.c文件使用。
在全局变量前,加上关键字static,该变量就被定义成为一个静态全局变量。我们先举一个静态全局变量的例子,如下:
#include <stdio.h>
#define uchar unsigned char
uchar i;
static int n=0;
uchar niu[9]={1,3,6,9,5,20,100,12};
int led(char x);
main()
{
for(i=0;i<3;i++)
{
n=n+1;
led(n);
}
}
int led(char x)
{
n=niu[x]; //3,5,100
printf("%d\t",n);
return n;
}
执行完程序后,输出n的结果为3,5,100。
全局变量和全局静态变量的区别
1.1、全局变量是没有用static修饰的全局变量,全局变量默认是有外部链接性的,作用域是整个工程,在一个文件内定义的全局变量,在另一个文件中,通过extern 全局变量名的声明,就可以使用全局变量。
1.2、全局静态变量是显式用static修饰的全局变量,作用域是声明此变量所在的文件,其他的文件即使用extern声明也不能使用。
2、局部静态变量
一般情况下,在函数体内定义了一个变量,每当程序运行到该语句时都会给该局部变量分配栈内存。但随着程序退出函数体,系统就会收回栈内存,局部变量也相应失效。
但有时候,我们需要在两次调用之间对变量的值进行保存。
通常的想法是定义一个全局变量来实现。但这样一来,变量已经不再属于函数本身了,不再仅受函数的控制,给程序的维护带来不便。静态局部变量正好可以解决这个问题。
静态局部变量保存在全局数据区,而不是保存在栈中,每次的值保持到下一次调用,直到下次赋新值。
静态局部变量有以下特点:
2.1、该变量在全局数据区分配内存;
2.2、静态局部变量在程序执行到该对象的声明处时被首次初始化,即以后的函数调用不再进行初始化。
2.3、静态局部变量今天一起来分析C语言,static关键字的用法。

static的用法
static关键字定义该变量为静态变量。
1、全局静态变量
如果定义为全局变量的静态变量,则和全局变量完全相同,只是静态全局变量只能在该.c文件中使用。而全局变量在同一个工程文件中可以被多个.c文件使用。
在全局变量前,加上关键字static,该变量就被定义成为一个静态全局变量。我们先举一个静态全局变量的例子,如下:
#include <stdio.h>
#define uchar unsigned char
uchar i;
static int n=0;
uchar niu[9]={1,3,6,9,5,20,100,12};
int led(char x);
main()
{
for(i=0;i<3;i++)
{
n=n+1;
led(n);
}
}
int led(char x)
{
n=niu[x]; //3,5,100
printf("%d\t",n);
return n;
}
执行完程序后,输出n的结果为3,5,100。
全局变量和全局静态变量的区别
1.1、全局变量是没有用static修饰的全局变量,全局变量默认是有外部链接性的,作用域是整个工程,在一个文件内定义的全局变量,在另一个文件中,通过extern 全局变量名的声明,就可以使用全局变量。
1.2、全局静态变量是显式用static修饰的全局变量,作用域是声明此变量所在的文件,其他的文件即使用extern声明也不能使用。
2、局部静态变量
一般情况下,在函数体内定义了一个变量,每当程序运行到该语句时都会给该局部变量分配栈内存。但随着程序退出函数体,系统就会收回栈内存,局部变量也相应失效。
但有时候,我们需要在两次调用之间对变量的值进行保存。
通常的想法是定义一个全局变量来实现。但这样一来,变量已经不再属于函数本身了,不再仅受函数的控制,给程序的维护带来不便。静态局部变量正好可以解决这个问题。
静态局部变量保存在全局数据区,而不是保存在栈中,每次的值保持到下一次调用,直到下次赋新值。
静态局部变量有以下特点:
2.1、该变量在全局数据区分配内存;
2.2、静态局部变量在程序执行到该对象的声明处时被首次初始化,即以后的函数调用不再进行初始化。
2.3、静态局部变量一般在声明处初始化,如果没有显式初始化,会被程序自动初始化为0;
2.4、它始终驻留在全局数据区,直到程序运行结束。但其作用域为局部作用域,当定义它的函数或语句块结束时,其作用域随之结束。
局部变量和局部静态变量的区别
局部变量,作用域仅限该函数体,函数体执行完,该变量占用的内存空间就被释放。
如果定义为局部静态变量,作用域和局部变量完全相同,但该局部变量占用的内存不会被优化,会一直存在。
定义为局部静态变量,没有赋值,默认为0。它限定一个变量,其值不允许被改变,产生静态作用。一般在声明处初始化,如果没有显式初始化,会被程序自动初始化为0;
2.4、它始终驻留在全局数据区,直到程序运行结束。但其作用域为局部作用域,当定义它的函数或语句块结束时,其作用域随之结束。
局部变量和局部静态变量的区别
局部变量,作用域仅限该函数体,函数体执行完,该变量占用的内存空间就被释放。
如果定义为局部静态变量,作用域和局部变量完全相同,但该局部变量占用的内存不会被优化,会一直存在。
定义为局部静态变量,没有赋值,默认为0。它限定一个变量,其值不允许被改变,产生静态作用。