面试题:常量指针和指针常量?

简介: 面试题:常量指针和指针常量?

面试题:常量指针和指针常量?

在 C++ 中,常量指针(const pointer)和指针常量(pointer to const)是指针变量的两种变形。它们各自具有不同的特点和应用场景。

常量指针

常量指针是指针指向一个常量值,因此无法通过该指针修改所指对象的值。

以下是一个简单的例子:

int x = 10;
const int *p = &x;
*p = 20; // 错误,不能通过常量指针修改所指对象的值
x = 20; // 正确,可以直接修改 x 的值

上面的代码中,p 是一个常量指针,它指向一个整型常量 x。由于 p 是常量指针,无法通过 *p 修改所指对象的值。但是可以直接修改 x 的值。

指针常量

指针常量是指针本身是一个常量,因此它无法再指向其它对象,但是可以通过指针间接访问所指对象,并修改其值或地址。

以下是一个简单的例子:

int x = 10;
int *const p = &x;
*p = 20; // 正确,可以通过指针修改所指对象的值
int y = 30;
p = &y; // 错误,无法重新赋值指针常量p的值

上面的代码中,p 是一个指针常量,它指向整型变量 x。由于 p 是指针常量,无法通过重新赋值来访问其它对象,但是可以通过 *p 修改所指对象的值或地址。

常量指针和指针常量的应用场景

常量指针通常适用于指针指向一个不可被修改的常量(如只读内存、只读寄存器等)的情况。另外,常量指针也适用于需传入函数作为参数、但是不想改变函数内部数据的情况。

指针常量通常适用于声明一个永远不会变的指针,且希望其他人清楚地了解该指针不会发生变化,并且希望通过该指针改变所指对象的值或地址的情况。

总结

在 C++ 中,常量指针和指针常量分别代表了两种指针变形形式。常量指针是指针指向一个常量值,不允许通过该指针修改所指对象的值;而指针常量是指针本身是一个常量,无法再指向其它对象,但是可以通过指针间接访问所指对象,并修改其值或地址。在实际开发中,需要根据具体问题和应用场景来选择合适的指针类型来解决问题。

相关文章
|
3月前
|
C++
C/C++工程师面试题(指针篇)
C/C++工程师面试题(指针篇)
53 0
|
4月前
|
算法 程序员 索引
【Leetcode 程序员面试金典 02.08】 —— 环路检测 |双指针
我们可以使用双指针解决本题,由数学推导可知:a 的距离为(环长度的倍数 - b),即 tmp 指针从头节点走到环开头节点等于 slow 指针走到环开头节点的距离
|
12天前
|
人工智能 C++
【重学C++】【指针】轻松理解常量指针和指针常量
【重学C++】【指针】轻松理解常量指针和指针常量
12 0
|
2月前
|
编解码 缓存 安全
【C/C++ 泡沫精选面试题03】谈谈C/C++ 智能指针?
【C/C++ 泡沫精选面试题03】谈谈C/C++ 智能指针?
34 1
|
2月前
|
存储 C语言
c语言中strlen与sizeof的区别(指针面试题详解帮你深度区分!)
c语言中strlen与sizeof的区别(指针面试题详解帮你深度区分!)
|
3月前
|
编译器 C语言 C++
深入探究C语言中的常量指针与野指针概念及其应用
深入探究C语言中的常量指针与野指针概念及其应用
20 1
|
3月前
|
安全 IDE Java
【2024java面试题无需C币下载】终结空指针异常:Java开发者的生存指南
【2024java面试题无需C币下载】终结空指针异常:Java开发者的生存指南
47 1
|
4月前
|
C++
面试题:如何避免野指针?
面试题:如何避免野指针?
27 0
|
4月前
|
存储 C++
面试题:C/C++引用和指针的区别?
面试题:C/C++引用和指针的区别?
34 0
|
4月前
|
存储 C++
面试题:数组和指针的区别?
面试题:数组和指针的区别?
27 0