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

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

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

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

相关文章
|
6月前
|
C++
C/C++工程师面试题(指针篇)
C/C++工程师面试题(指针篇)
101 0
|
6月前
|
算法 程序员 索引
【Leetcode 程序员面试金典 02.08】 —— 环路检测 |双指针
我们可以使用双指针解决本题,由数学推导可知:a 的距离为(环长度的倍数 - b),即 tmp 指针从头节点走到环开头节点等于 slow 指针走到环开头节点的距离
|
1月前
|
编译器 C语言
经典左旋,指针面试题
文章介绍了两种C语言实现字符串左旋的方法,以及如何使用C语言对整数数组进行奇偶数排序。通过实例演示了如何使用函数reverse_part和leftRound,以及在swap_arr中实现数组元素的重新排列。
26 0
|
1月前
|
Serverless 编译器 C语言
【C语言】指针篇- 深度解析Sizeof和Strlen:热门面试题探究(5/5)
【C语言】指针篇- 深度解析Sizeof和Strlen:热门面试题探究(5/5)
|
6月前
|
Java Go
Golang深入浅出之-Go语言指针面试必知:理解与使用指针
【4月更文挑战第21天】Go语言中的指针允许直接操作内存,常用于高效数据共享和传递。本文介绍了指针的基础知识,如声明、初始化和解引用,以及作为函数参数使用。此外,讨论了`new()`与`make()`的区别和内存逃逸分析。在结构体上下文中,指针用于减少复制开销和直接修改对象。理解指针与内存管理、结构体的关系及常见易错点,对于面试和编写高性能Go代码至关重要。
90 2
|
6月前
|
编译器 C++
C/C++杂谈——指针常量、常量指针
C/C++杂谈——指针常量、常量指针
47 0
|
6月前
|
人工智能 C++
【重学C++】【指针】轻松理解常量指针和指针常量
【重学C++】【指针】轻松理解常量指针和指针常量
120 0
|
6月前
|
编解码 缓存 安全
【C/C++ 泡沫精选面试题03】谈谈C/C++ 智能指针?
【C/C++ 泡沫精选面试题03】谈谈C/C++ 智能指针?
84 1
|
6月前
|
编译器 C语言 C++
深入探究C语言中的常量指针与野指针概念及其应用
深入探究C语言中的常量指针与野指针概念及其应用
64 1
|
6月前
|
存储 C语言
c语言中strlen与sizeof的区别(指针面试题详解帮你深度区分!)
c语言中strlen与sizeof的区别(指针面试题详解帮你深度区分!)

热门文章

最新文章