33、指针进阶5:指针与常量
大约 2 分钟C语言基础程序程序厨
很多同学貌似经常弄混指针常量和常量指针的区别,主要是因为中文翻译的不是很好,你如果根据它的应为来理解就能方便一些,一个是常量指针(Pointer to Constant),另一个是指针常量(Constant Pointer),它们是两个完全不同的概念,其核心在于表示不同的内存访问权限。
下面详细介绍。
常量指针(Pointer to Constant)
常量指针是指指向常量的指针,即该指针指向的值不能被修改(通过该指针)。换句话说,你可以改变指针的指向,但不能通过该指针改变它所指向的值。
暂时无法在飞书文档外展示此内容
声明方式:
const 数据类型 *指针名;
// 或者
数据类型 const *指针名;
示例代码:
#include <stdio.h>
int main() {
int a = 10;
const int *ptr = &a;
printf("ptr: %d\n", *ptr); // 输出: 10
// *ptr = 20; // 错误:不能通过常量指针修改其指向的值
int b = 30;
ptr = &b; // 正确:常量指针可以改变其指向
printf("ptr: %d\n", *ptr); // 输出: 30
return 0;
}
指针常量(Constant Pointer)
指针常量是指指针本身是常量,即一旦初始化后,其指向的地址就不能再改变。但是,你可以通过该指针修改它所指向的值。
暂时无法在飞书文档外展示此内容
声明方式:
数据类型 *const 指针名;
示例代码:
#include <stdio.h>
int main() {
int a = 10;
int *const ptr = &a;
printf("ptr: %d\n", *ptr); // 输出: 10
*ptr = 20; // 正确:可以通过指针常量修改其指向的值
printf("ptr: %d\n", *ptr); // 输出: 20
// ptr = &b; // 错误:指针常量不能改变其指向
return 0;
}
常量指针常量(Constant Pointer to Constant)
常量指针常量是指既指向常量又本身是常量的指针。即初始化之后,指针指向的地址及其指向的值均只能读取,不能修改。
暂时无法在飞书文档外展示此内容
声明方式:
const 数据类型 *const 指针名;
示例代码:
#include <stdio.h>
int main() {
int a = 10;
const int *const ptr = &a;
printf("ptr: %d\n", *ptr); // 输出: 10
// *ptr = 20; // 错误:不能通过常量指针常量修改其指向的值
// ptr = &b; // 错误:不能改变常量指针常量的指向
return 0;
}
总结
- 常量指针(Pointer to Constant):可以改变指向,但不能通过该指针修改值。
- 指针常量(Constant Pointer):不能改变指向,但可以通过该指针修改值。
- 常量指针常量(Constant Pointer to Constant):既不能改变指向,也不能通过该指针修改值。
