static const
和 和有什么不一样const
?例如:
static const int a=5;
const int i=5;
它们之间有什么区别吗?您什么时候会使用其中一种?
static
确定函数外部的可见性或内部变量的寿命。const
因此,它与本身无关。
const
意味着您在初始化后不会更改该值。
static
函数内部意味着变量将在函数执行之前和之后存在。
static
在函数之外意味着标记符号的范围static
仅限于该 .c 文件,并且在它之外无法看到。
从技术上讲(如果您想查看它),static
它是一个存储说明符并且const
是一个类型限定符。
区别在于联动。
// At file scope
static const int a=5; // internal linkage
const int i=5; // external linkage
如果i
对象未在定义它的翻译单元之外使用,则应使用说明static
符声明它。
这使编译器能够(可能)执行进一步的优化并通知读者该对象未在其翻译单元之外使用。
这取决于这些定义是否在函数内部。上面的 ouah 给出了函数外情况的答案。在函数内部,效果是不同的,如下例所示:
#include <stdlib.h>
void my_function() {
const int foo = rand(); // Perfectly OK!
static const int bar = rand(); // Compile time error.
}
如果您希望局部变量“真正恒定”,则必须不仅定义“const”,还定义“static const”。
const int i=5;
i
如果在本地定义和声明,则可以使用指针修改值i
,如果是static 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;
}