static const和const有什么区别?

时间:2012-11-01 21:28:51

标签: c static constants

static constconst之间有什么区别? 例如:

static const int a=5;
const int i=5;

它们之间有什么区别吗? 你什么时候用一个而不是另一个?

4 个答案:

答案 0 :(得分:69)

static确定函数外部的可见性或内部的变量寿命。因此它与const本身无关。

const意味着您在初始化之后不会更改该值。

函数内部的静态意味着变量将在函数结束之前和之后存在。

函数外部的静态意味着标记为static的符号的范围仅限于该.c文件,并且不能在其外部看到。

从技术上讲(如果你想查看),static是一个存储说明符,const是一个类型限定符。

答案 1 :(得分:44)

区别在于联系。

// At file scope
static const int a=5;  // internal linkage
const int i=5;         // external linkage

如果i对象未在定义它的翻译单元之外使用,则应使用static说明符声明它。

这使编译器能够(可能)执行进一步的优化,并通知读者该对象未在其翻译单元之外使用。

答案 2 :(得分:0)

这取决于这些定义是否在函数内部。案例外部一个函数的答案由上面的ouah给出。函数的 Inside 效果不同,如下例所示:

#include <stdlib.h>

void my_function() {
  const int foo = rand();         // Perfectly OK!
  static const int bar = rand();  // Compile time error.
}

如果你想让局部变量“真正恒定”,你必须定义它不仅仅是“const”而是“static const”。

答案 3 :(得分:0)

const int i = 5;
如果在本地定义和声明了i,我认为您可以使用指针进行修改, 如果它是静态const int a = 5;或const int i = 5;全局而言,您无法修改,因为它存储在数据段的RO存储器中。

    #include <stdio.h>
   //const int  a=10;              /* can not modify */
   int main(void) {
   // your code goes here

   //static const int const a=10;   /* can not modify */
   const int  a=10; 
   int *const ptr=&a;
   *ptr=18;
   printf("The val a is %d",a);
   return 0;
}