c语言之const和static关键字

static和const是c语言中常用的关键字,两者都可以修饰函数和变量,但其作用大不相同。

文章目录

01

static

作用:被修饰的内容为静态变量,编译时即分配存储空间,程序运行过程中不再分配。修饰变量:当我们在定义没有关键字的局部变量的时候,他在内存中储存的方式是动态的,在每次到达定义变量的程序位置,则为其分配存储空间,跳出代码块即结束其生命期。而使用static关键字修饰局部变量,他在内存中静态存储,在编译代码的同时即为其分配存储空间,在程序运行期间,不再运行定义指令,可以作为存储需要被记忆值内容的变量,在整个程序退出时,生命期结束。在使用static修饰全局变量时,同样在编译同时为其分配存储空间,程序结束时释放。在我们想要某全局变量只在本文件内使用而不被其他文件调用时,我们可以使用static声明。

void add()
{
  static int a;
  a++;
  cout<<a<<endl;
}
int main()
{
  while(1)
  {
    add();
  }
}

修饰函数:在修饰函数时,被修饰的函数只能在本文件调用,这样可以有效防止在其他文件出现混乱的调用,这对函数本身就是一种保护机制。

02

const

作用:被修饰的内容为常量,在程序内不可被改变值。修饰变量:当const修饰变量时,该变量仅作为声明,在接下来的程序中不可再修改其值。当我们在程序中有改变值的动作时,在编译过程中即被抛出错误,这样做的好处是我们不必在程序出现bug时再去代码中寻找错误。
修饰指针:1、关键字修饰指针本身,就是指针本身就是常量,其定义方式如下:

const (int*) a;
//或者
int* const a;

其意义就是指针指向的内容可以被改变,而指针本身不可被改变。
2、关键字修饰被指向的值,指针指向的值即为常量,其定义方式如下:

const int *a;

其意义是指针本身可以被改变,但指向的值为常量不可变。
3、同时被修饰,既作用于被指向的值也作用于指针本身:

const int* const a;

指针本身和指向的值均为常量,都不可被改变。
修饰函数:1、修饰形参。当修饰形参时,参数传入后形参在函数内部为可读不再被修改。

void test(const a);

int main()
{
  test(3);
}

void test(const a)
{
  return a;
}

2、修饰函数返回值。修饰函数返回值时,把他当作一个常量处理,将其赋值给同种类型的常量指针。

const int test();
int main()
{
  const int *a = test();
}
c语言之const和static关键字

扫描二维码关注公众号

爱玩嵌入式

嵌入式/C++/Linux/Qt

原文出处:微信公众号【海城沐雨 爱玩嵌入式】

原文链接:https://mp.weixin.qq.com/s/MOvFqrSmSbvp3AFVh9369Q

本文观点不代表Dotnet9立场,转载请联系原作者。

发表评论

登录后才能评论