[经验分享]

const关键字

[复制链接]
1861|27
手机看帖
扫描二维码
随时随地手机跟帖
hudi008|  楼主 | 2024-2-18 20:24 | 显示全部楼层 |阅读模式
const关键字是用来修饰变量的,它修饰的变量在程序运行的过程中不能发生改变,即不能进行二次赋值。那么当出现以下情况:
1、const int *p;
2、int const *p;
3、int * const p;
在这三句话中,总共有两个变量,分别是指针指向的整型数据和指针。如果修饰的是整型数据,那么*p即指针指向对象的内容不能发生改变;如果是指针的话,那么p即指针指向的对象不能发生改变。让人不禁流汗,const关键字,你还知道你在和谁贴贴嘛。


接下来, const关键字的真正(修饰)对象。

一、种子选手1号:const int *p;


经过一番试探,可以很明显的看到,在这种情况下,它修饰的是指针指向的整型数据,而不是指针。因为指针改变指向没有报错,反而当我改变指向对象的内容的时候,系统表示*p只处于只读状态,即const关键字当前修饰的是整型数据(指向对象的内容)。

二、种子选手二号:int const *p


通过编译可以看到,它和const int *p修饰的对象是一样的,也是整型数据,即指向对象的内容不能发生改变。

三、种子选手三号:int * const p;


通过编译我们可以看到,此时const修饰的变量是指针,指针在运行的过程中指向的对象不能发生改变。

总结一下,const关键字只有在和指针贴贴的最近的时候,修饰的对象才是指针,在其余情况下修饰的都是指针指向的内容。

使用特权

评论回复
tpgf| | 2024-3-5 12:20 | 显示全部楼层
我们定义常量过多 会占用不必要的空间

使用特权

评论回复
heimaojingzhang| | 2024-3-5 13:35 | 显示全部楼层
const修饰一个变量时,一定要给这个变量初始化,若不初始化,在后面也不能初始化

使用特权

评论回复
keaibukelian| | 2024-3-5 14:08 | 显示全部楼层
const可以用来修饰变量,修饰函数参数,修饰函数返回值,且被const修饰的东西,都受到强制保护

使用特权

评论回复
paotangsan| | 2024-3-5 18:29 | 显示全部楼层
const可以增强代码的可读性,给读代码的人传递有用的信息

使用特权

评论回复
guanjiaer| | 2024-3-5 19:02 | 显示全部楼层
只要一个变量前用const来修饰,就意味着该变量里的数据只能被访问,而不能被修改,也就是意味着“只读”

使用特权

评论回复
janewood| | 2024-4-5 22:21 | 显示全部楼层
const int *p;:这里const修饰的是int类型的变量,这意味着你不能通过指针p来修改它所指向的整数。但是,你可以改变指针p本身的值,让它指向另一个整数。

int const *p;:这与第一种情况是等价的。const仍然修饰的是int类型的变量,而不是指针本身。所以,同样的规则适用:不能通过指针p来修改它所指向的整数,但可以改变指针p的值。

int * const p;:在这种情况下,const修饰的是指针p本身。这意味着你不能改变指针p的值,即它必须始终指向同一个整数。然而,你可以通过指针p来修改它所指向的整数。

使用特权

评论回复
hearstnorman323| | 2024-4-6 12:49 | 显示全部楼层
int * const p; 在这个声明中,const 关键字出现在指针变量 p 之后,这意味着指针 p 指向的地址是常量,即指针 p 一旦指向一个地址,就不能改变它所指向的地址,但它指向的地址内的数据是可以改变的。

使用特权

评论回复
albertaabbot| | 2024-4-6 20:09 | 显示全部楼层
指针p不能被修改,即不能指向其他整型数据。但是,指针指向的对象(即整型数据)可以被修改。

使用特权

评论回复
jonas222| | 2024-4-7 13:25 | 显示全部楼层
const修饰的是指针p本身。这意味着指针p在初始化之后不能被重新赋值,即不能指向其他的地址。但是,通过指针p可以修改它所指向的整型变量的值。

使用特权

评论回复
dspmana| | 2024-4-7 17:13 | 显示全部楼层
const int *p; // 指针指向的整型数据不能发生改变,指针本身可以改变指向
int const *p; // 与第1句相同,指针指向的整型数据不能发生改变,指针本身可以改变指向
int * const p; // 指针本身不能改变指向,指针指向的整型数据可以改变

使用特权

评论回复
tifmill| | 2024-4-8 17:08 | 显示全部楼层
int const *p; 在这个声明中,const 关键字出现在类型说明符 int 之后,这意味着指针 p 本身是一个常量,即指针 p 的值(指针所指向的地址)不能改变,但指向的地址内的数据可以改变。

使用特权

评论回复
modesty3jonah| | 2024-4-9 22:11 | 显示全部楼层
const修饰的是int,即指针所指向的整型数据。这意味着通过指针p不能修改它所指向的整型变量的值。但是,指针p本身是可以改变的,它可以指向其他的整型变量。

使用特权

评论回复
mikewalpole| | 2024-4-9 22:31 | 显示全部楼层
const int p; // 指针可以改变,指向的整型数据不能改变
这里const修饰的是p,意味着指针指向的整型数据是常量,不能进行二次赋值。但是指针本身可以改变,可以指向其他内存地址。

使用特权

评论回复
qiufengsd| | 2024-4-10 17:13 | 显示全部楼层
当const位于*的左侧时,它修饰的是指针所指向的数据。
当const位于*的右侧时,它修饰的是指针本身。

使用特权

评论回复
sdlls| | 2024-4-11 17:01 | 显示全部楼层
当const修饰指针指向的对象时,对象的内容不能被修改。
当const修饰指针本身时,指针不能被修改,即不能指向其他对象。

使用特权

评论回复
bartonalfred| | 2024-4-11 19:13 | 显示全部楼层
当const出现在星号左边时,表示被指物是常量,不能被修改。
当const出现在星号右边时,表示指针自身是常量,不能指向别的东西。
当const出现在星号的两侧时,表示指针和它所指的对象都是常量。

使用特权

评论回复
hudi008|  楼主 | 2024-4-11 20:45 | 显示全部楼层
int const *p;
这与第一种情况完全相同。在 C 和 C++ 中,int const *p; 和 const int *p; 是等价的。const 仍然修饰的是指针所指向的整型数据。
同样,你不能改变 p 当前指向的整数值,但可以改变 p 指向的地址。

使用特权

评论回复
beacherblack| | 2024-4-14 21:21 | 显示全部楼层
理解这些的关键在于明确 const 的位置。在 * 之前的 const 修饰的是指针所指向的内容,而在 * 之后的 const(实际上是紧跟着指针类型声明的 const)修饰的是指针本身。

使用特权

评论回复
rosemoore| | 2024-4-14 22:38 | 显示全部楼层
int * const p;
在这里,const 修饰的是指针 p 本身。这意味着 p 是一个指向整型的常量指针。你不能改变 p 的值(即它指向的地址),但可以改变 p 所指向地址上的整数值。
因此,p = &some_other_int; 是非法的,但 *p = some_value; 是合法的。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

240

主题

9434

帖子

11

粉丝