Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 声明存储类的变量_C_Variables - Fatal编程技术网

C 声明存储类的变量

C 声明存储类的变量,c,variables,C,Variables,在编写代码时,我声明了以下内容: const int a = 4; “a”是编译器不允许我更改的变量吗?或者我需要静态常量int a=4 谢谢 当声明为常量时,不能修改 const int a = 5; a = 6; 不编译(表达式必须是可修改的左值)。如果已将其声明为常量,则无法修改 const int a = 5; a = 6; 不编译(表达式必须是可修改的左值) 是编译器不允许您更改的变量 静态限定符更改变量的行为方式。具体来说,它的意思是,变量在程序开始执行时被“分配”,只有在程序

在编写代码时,我声明了以下内容:

const int a = 4;
“a”是编译器不允许我更改的变量吗?或者我需要静态常量int a=4


谢谢

当声明为常量时,不能修改

const int a = 5;
a = 6;

不编译(表达式必须是可修改的左值)。

如果已将其声明为常量,则无法修改

const int a = 5;
a = 6;
不编译(表达式必须是可修改的左值)

是编译器不允许您更改的变量

静态限定符更改变量的行为方式。具体来说,它的意思是,变量在程序开始执行时被“分配”,只有在程序终止时才被解除分配。特别是静态类变量保持其状态独立于实例化对象。函数中的静态变量在函数调用之间保持其状态。在这种情况下,全局常量上的静态限定符是多余的,仅用于确定内部/外部链接

是编译器不允许您更改的变量


静态限定符更改变量的行为方式。具体来说,它的意思是,变量在程序开始执行时被“分配”,只有在程序终止时才被解除分配。特别是静态类变量保持其状态独立于实例化对象。函数中的静态变量在函数调用之间保持其状态。在这种情况下,全局常量上的静态限定符是多余的,仅用于确定内部/外部链接。

当您使用
常量int a=4定义
a
,您不应更改
a,但不需要编译器阻止您这样做。如果您试图直接修改
a
,编译器应生成诊断消息,如
a=5,但还有其他方法可以尝试修改编译器不一定会捕获的
a
,例如
*(int*)&a=5。如果这样做,C标准不会定义结果行为。将
static
添加到定义中不会改变这一点。

当您使用
const int a=4定义
a
,您不应更改
a,但不需要编译器阻止您这样做。如果您试图直接修改
a
,编译器应生成诊断消息,如
a=5,但还有其他方法可以尝试修改编译器不一定会捕获的
a
,例如
*(int*)&a=5。如果这样做,C标准不会定义结果行为。向定义中添加
static
不会改变这一点。

什么是“类变量”?(C中的问题是标记C,而不是C++),全局常量的静态限定符也不是冗余的。我想在C中看到关于“全局常量”的章节。考虑到问题的简单性,我想知道链接器如何处理静态与非静态的关系:“类变量”是什么?(C中的问题是标记C,而不是C++),全局常量的静态限定符也不是冗余的。我想在C中看到关于“全局常量”的章节。考虑到问题的简单性,我想知道链接器如何处理静态与非静态的关系是过度的:)很好地指出它不能保证。它不是一个变量上的写保护标签,正如您可能希望的那样。很好地指出,它不是保证的。它不是一个变量上的写保护标签,正如您可能希望的那样。严格来说,这不是真的。你可以通过一个指针间接地修改它,编译器不会捕捉到它。严格来说,这不是真的。您可以通过一个指针间接地修改它,而编译器不会捕获它。