掌握 C 中的常量指针和常量指针
在 C 语言中,指针 是一个变量,存储另一个变量的内存地址,const关键字 用于定义变量或指针,其值一旦初始化就无法更改。当我们组合指针时 与常量 关键字,我们可以控制两件事 -
- 指针中存储的地址是否可以更改。
- 该地址存储的值是否可以更改。
在本章中,我们将了解常量指针的三种主要变体 -
- 常量指针
- 指向常量的指针
- 指向常量的常量指针
常量指针
常量指针 意味着指针本身是常量。一旦它被初始化为指向一个内存位置,它就不能指向不同的位置,但存储在该位置的值仍然可以更改。
以下是常量指针的语法 -
<前>06前>在此语法中,data_type 是指针指向的数据类型,*const 使指针本身恒定,pointer_name 是指针的名称,&variable 为其分配变量的内存地址。
常量指针示例
在这个例子中,我们声明一个常量指针ptr 并使用变量x的地址对其进行初始化 。然后,我们更改 x 的值 使用ptr 然后我们打印它的值。
<前>15前>下面显示的是输出 上面的程序,显示指针保持固定在 x ,但是 x的值 可以更新。
<前>23前>常量指针错误示例
这是我们声明常量指针 ptr 的示例 并使用变量x的地址对其进行初始化 。然后,我们尝试让它指向变量y的地址 。这将给出错误 因为常量指针一旦初始化就不能指向另一个内存位置。
<前>37前>您可以看到下面的错误 ,表明我们不能改变常量指针的地址。
<前>45前>指向常量的指针
指向常量的指针 表示它所指向的值不能改变,但指针本身可以指向不同的内存地址(或变量)。
以下是指向常量的指针的语法 -
<前>53前>在此语法中,const data_type 或data_type const 表示指针指向一个常量值,pointer_name 是指针的名称,&variable 为其分配变量的地址。
指向常量的指针示例
在这个例子中,我们声明一个指针 ptr 指向一个常量值并将其分配给变量a的地址 。然后,我们让指针指向变量b的不同地址 并打印其值。
<前>62前>以下是输出 上面的程序,显示相同的指针指向不同的变量。
<前>74前>指向常量错误的指针示例
这是一个例子,我们声明一个指向常量 ptr 的指针 并使用变量 a的地址对其进行初始化 。然后,我们尝试改变a的值 通过指针。这将给出一个错误 因为指向常量的指针不允许修改它指向的值。
<前>80前>下面您可以看到输出 ,显示错误 表明我们不能通过指向常量的指针修改该值。
<前>90前>指向常量的常量指针
指向常量的常量指针 是一个不能改变其内存地址的指针,并且存储在该内存地址的值也不能改变。这两个操作都受到限制,因此我们只能读取值,而不能读取其他内容。
以下是指向常量的常量指针的语法 -
<前>108前>在此语法中 -
- 常量数据类型 表示该内存位置的值不能通过指针改变。
- *常量指针名称 意味着初始化后指针本身不能指向任何其他内存地址。
- 变量&变量 将指针分配给变量的内存地址。
指向常量的常量指针示例
在此示例中,我们声明一个指向常量 ptr 的常量指针 并将其分配给变量a的内存地址 。然后我们打印 a 的值 使用指针。
<前>115前>以下是输出 上述程序 -
<前>120前>指向常量错误的常量指针示例
在这个例子中,我们声明一个指向常量 ptr的常量指针 并用变量 a 初始化它 。然后,我们尝试通过指针修改值,并尝试使指针指向另一个变量。这两种操作都是不允许的,并且会导致编译器错误 .
<前>135前>下面您可以看到输出 显示错误 -
<前>147前>常量指针类型之间的差异
下表显示了之间的差异 一个常量指针,一个指向常量的指针,一个指向常量的常量指针。
150指向常量的指针可以指向不同地址,但不能修改所指向位置的值。是否
166Constant Pointer to Constant地址固定的指针,该地址的值不能修改。NoNo
170
结论
在本章中,我们介绍了 C 中的常量指针和指向常量的指针。常量指针 修复地址但允许更改值,指向常量的指针 允许更改地址但不允许更改值,以及指向常量的常量指针 限制两者。
C语言