C 语言 const 限定符

17 Mar 2025 | 4 分钟阅读

通常,const 限定符用于将变量声明为常量,这意味着一旦变量被初始化,它的值就不能改变。然而,使用 const 有几个好处,例如,如果我们有一个 PI 的常量值,我们不希望程序的任何部分修改该值。因此,我们可以使用 const 限定符将其声明为 const。但像往常一样,这有一点弯路,因为有时我们可以更改用 const 限定符声明的变量的值。但是,这并非总是可能,因为它取决于 const 变量在内存中的存储位置。

const 变量的语法

通常,const 限定符仅向编译器发出指示,表明限定对象的数值不能被更改。换句话说,我们可以说 const 意味着不可修改(在运行时不能为对象赋值)。

Const Qualifier in C

然而,当我们使用 const 限定符将标识符声明为常量时,它取决于实现(或编译器),“常量变量”将被放置或存储在进程控制块中。因此,许多机器将常量和跳转表存储在文本段中,该段仅包含所有其他可执行指令,并且是只读的。

规则

有一些规则可以帮助我们决定何时在 C 程序中使用 const

  • 当我们不想在初始化后更改变量的值时,我们可以使用它。
  • 在按引用传递的情况下,当我们不想更改传递变量的值时。例如:
  • 我们也可以在 C 中使用指针来映射 I/O 寄存器。

现在,让我们来看一些我们将使用 const 限定符在我们的程序中与指针一起使用的示例

1. 指向常量的指针

语法

正如您在上面的声明中所看到的,“xData”指向一个整数常量变量。因此,我们不能使用指针(*xData)更改被指向的整数变量的值,但我们可以更改指针以指向任何其他整数变量。因此,现在指针可以指向任何其他变量是可能的,因为它通常存储在读写区域(或读写内存)中。所以,让我们通过下面的示例看看如何实现它。

示例 1

在这个例子中,我们将尝试使用指向常量的指针(piIndex)来更改整数变量的值。但是,如果用户尝试使用 *piData 更改变量(iIndexData1)的值,他将收到编译器错误。

程序

输出

在函数 'main' 中:错误:分配只读位置 '*piIndex'

*piIndex = 3;

示例 2

现在,我们将尝试在示例中更改指向的变量。

程序

输出

*piIndex is 2
*piIndex is 4

您可以看到上面的代码完美运行,我们已成功更改了指向的变量。

2. 指向常量的常量指针

语法

正如您在上面的声明中所看到的,它描述了常量指针指向一个整数常量变量。这意味着我们不能更改指针指向的值,也不能将指针指向其他整数变量。

示例 1

在这个例子中,我们将使用指向常量的常量指针的概念。

程序

输出

*piData is 2

正如您所看到的,如果我们不尝试更改 piData 和 *piData 的值,那么一切都会正常工作。

示例 2

在这个例子中,我们将尝试更改 *piData 的值。但是,根据概念,我们将收到编译器错误,因为 *piData 被限定为常量。现在让我们看看会发生什么。

程序

输出

Error: assignment of read-only location '*piData'

正如您在输出中看到的,我们不能更改 "*pidata" 的值。

示例 2

这里我们将看到是否可以将另一个整数变量指向该指针。让我们看看会发生什么。

程序

输出

Error: assignment of read-only variable 'piData'

在上面两个程序的输出中,您可以看到,对于指向常量的常量指针,我们不能更改常量值,也不能将常量指针指向另一个变量。


下一个主题C 中的顺序点