C++中的const *与 * const:深入解析与区分

开发
要区分const int*和int* const,关键在于理解const修饰的是谁。如果const在类型(如int)之前,那么它修饰的是指针所指向的内容;如果const在指针符号*之后,那么它修饰的是指针本身。

在C++编程中,指针与const关键字的组合常常引发初学者的困惑。特别是当看到const int和int* const这两种声明时,很多人会感到迷惑不解。本文旨在深入解析这两种声明的含义,帮助读者准确区分它们。

一、const int*(指向常量的指针)

首先,我们来看const int*这种声明。这里,const修饰的是int,即指针所指向的内容是不可变的。换句话说,这个指针可以指向不同的const int对象,但它不能修改任何它所指向的对象的值。

示例代码:

const int a = 10;
const int b = 20;
const int* p = &a; // 正确,p指向常量a
cout << "p指向的值:" << *p << endl; // 输出a的值,即10
p = &b; // 正确,p可以重新指向另一个常量b
//*p = 30; // 错误!不能通过p修改它所指向的值

二、int* const(常量指针)

接下来,我们分析int* const这种声明。在这里,const修饰的是指针本身,而不是它所指向的内容。这意味着这个指针在初始化后就不能再指向其他对象了,但它可以修改它所指向对象的值(前提是该对象本身不是常量)。

示例代码:

int x = 100;
int y = 200;
int* const q = &x; // 正确,q是一个常量指针,初始化为指向x
cout << "q指向的值:" << *q << endl; // 输出x的值,即100
//*q = 150; // 如果x本身不是const,则这里是正确的,现在*q(即x)的值为150
//q = &y; // 错误!常量指针q不能再指向其他对象

注意,在上述代码中,我们修改了q所指向的值(即*q = 150;),这是允许的,因为q是一个指向int的常量指针,而不是指向const int的指针。但是,我们尝试让q指向另一个对象(即q = &y;),这是不允许的,因为q本身是一个常量指针。

三、总结与区分

要区分const int和int* const,关键在于理解const修饰的是谁。如果const在类型(如int)之前,那么它修饰的是指针所指向的内容;如果const在指针符号*之后,那么它修饰的是指针本身。

  • const int* p:p是一个指针,它可以改变指向,但不能修改它所指向的内容。
  • int* const q:q是一个常量指针,它指向的内容可以改变(如果内容本身不是常量),但q本身不能改变指向。

通过理解这两种声明的含义和用途,我们可以更加准确地使用指针和const关键字,编写出更安全、更可靠的C++代码。

责任编辑:赵宁宁 来源: 鲨鱼编程
相关推荐

2011-07-20 10:06:54

CC++const

2024-02-26 08:25:00

C++编程

2023-12-01 13:47:45

C语言conststat

2021-09-07 05:02:50

C++ConstexprConst

2024-02-23 18:04:37

C++const关键字

2023-09-26 22:37:16

C++const

2011-07-20 16:57:05

C++const

2011-06-21 10:37:56

const

2010-02-02 14:06:50

C++ const变量

2011-06-21 10:44:31

const

2011-05-17 13:04:20

Cconst

2024-01-03 13:38:00

C++面向对象编程OOP

2023-12-26 12:13:31

野指针C++编程

2011-07-14 09:09:14

const

2009-08-26 17:31:59

C# const常量

2023-12-31 12:56:02

C++内存编程

2024-04-19 13:02:27

容器C++

2011-07-20 16:30:42

C++

2023-09-07 23:30:47

运算符C++

2024-04-09 08:57:25

SizeofC++字符串
点赞
收藏

51CTO技术栈公众号