C语言高频面试题——常量指针与指针常量区别


1. 常量指针(Pointer to Constant)

定义:

常量指针是指向一个常量数据的指针,即指针指向的内容不能通过该指针被修改。

语法:
const int* ptr;

或者:

int const* ptr;
解释:
  • const修饰的是指针指向的内容(即int),表示指针指向的数据是只读的。
  • 指针本身可以改变指向其他地址,但不能通过该指针修改所指向的值。
示例代码:
int a = 10, b = 20;
const int* ptr = &a;

// 错误:不能通过ptr修改a的值
// *ptr = 30; // 编译错误

// 正确:可以改变指针的指向
ptr = &b; // ptr现在指向b
总结:
  • 指针可以指向不同的地址
  • 不能通过指针修改所指向的值

2. 指针常量(Constant Pointer)

定义:

指针常量是一个固定的指针,指针本身的值(即指向的地址)不能改变,但可以通过该指针修改所指向的内容。

语法:
int* const ptr = &a;
解释:
  • const修饰的是指针本身,表示指针一旦初始化后,其指向的地址不能改变。
  • 可以通过该指针修改所指向的值。
示例代码:
int a = 10, b = 20;
int* const ptr = &a;

// 正确:可以通过ptr修改a的值
*ptr = 30; // a现在变为30

// 错误:不能改变指针的指向
// ptr = &b; // 编译错误
总结:
  • 指针的指向地址固定,不能改变
  • 可以通过指针修改所指向的值

3. 两者的组合:指向常量的指针常量

如果同时限制指针本身的值和指针指向的内容都不能改变,可以使用以下语法:

语法:
const int* const ptr = &a;
解释:
  • 第一个const修饰的是指针指向的内容,表示内容不可修改。
  • 第二个const修饰的是指针本身,表示指针的指向地址不可改变。
示例代码:
int a = 10, b = 20;
const int* const ptr = &a;

// 错误:不能通过ptr修改a的值
// *ptr = 30; // 编译错误

// 错误:不能改变指针的指向
// ptr = &b; // 编译错误
总结:
  • 指针的指向地址固定,不能改变
  • 不能通过指针修改所指向的值

4. 总结对比

特性常量指针 (const int* ptr)指针常量 (int* const ptr)指向常量的指针常量 (const int* const ptr)
指针指向的地址是否可变
指针指向的内容是否可变

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值