static const
和const
之间有什么区别?
例如:
static const int a=5;
const int i=5;
它们之间有什么区别吗? 你什么时候用一个而不是另一个?
答案 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;
}