初入C语言:static,const关键字的初级用法

很多初学者会感受到对于const,static两个关键字用法有很多相似之处,并纠结于两者如何使用。本文将通过具体实例辨析两者用法。

一、const

C语言存在变量与常量两个概念。用通俗的话来讲,在我们写代码时,常量的值是固定的而变量的值可以随操作者的需求随时改变,例如:

    int a = 1;
	printf("%d\n", a);
	a = 2;
	printf("%d\n", a);

数字 1,2是常量。而a是变量,当我们在第一行代码中定义了整型变量a的值为1后,我们可以修改a的值变为2。

此时,const关键字用来将变量修饰为常变量,通常放在变量定义类型的前面:

const int a = 1;
a = 2;

我们就定义了一个常变量a。将a定义为常变量后如果我们接下来将2赋值给a时,编译器将会报错:“左值定义常变量”。也就是说当变量a被const修饰后a便无法被操作者修改,有了常量的属性。

二、static

static关键字与const关键字有异曲同工之处,static关键字不仅能用来修饰局部变量,修饰全局变量,称为静态全局变量,还可以用来修饰函数。

static修饰后的变量是“静态”的,静态变量和常变量不同,静态变量的意义是延长了变量的生命周期。通常如果我们定义一个函数,函数内存有变量a,那么当函数调用完后销毁时,变量a也随之销毁,计算机将变量a所占的空间返还给系统。而当变量a被static修饰变为静态变量后,a在函数销毁后不会被销毁,静态变量的值是可以被改变的

对于static及静态变量的理解,我们可以先来看下面一个例子:

void test()
{
   int a = 5;
  a++;
  printf("%d\n", a);
}

int main()
{

  for(i = 0; i <10; i++)
   { 
       test; 
    }
   return 0;
}

当我们观察这段代码时,我们会发现,在卖弄函数里用了一个for循环,循环调用test函数,调用十次,每次调用test()函数时,都会将数字五赋给,随后变量a加一,输出a的值。因此最终输出的结果很容易得到是6、6、6、6、6、6、6、6、6、6十个六;当我们在 “int a = 5;” 这个语句前面用static修饰时:

​
void test()
{
  static int a = 5;
  a++;
  printf("%d\n", a);
}

int main()
{

  for(i = 0; i <10; i++)
   { 
       test; 
    }
   return 0;
}

​

我们发现输出结果变成了6、7、8、9、10、11、12、13、14、15这十个截然不同的数字。这是为什么呢? 我们通过static关键字的定义可以得知,static修饰的变量a在包含它的函数销毁后,a并不会销毁。因此在这个程序中第一次调用函数test()时,a的值变为6。在函数销毁后准备第二次调用时,a依然存在,并且保持原来的值不变仍为6,第二次调用时a++,a的值变为7,依此类推。

你可能感兴趣的:(c语言,c++,开发语言)