首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

更改const指针的值

在C++中,const指针指向的是一个常量值,即该指针所指向的内存地址中的值不能被修改。如果要修改指针指向的值,需要使用const修饰指针本身,即将指针本身也变成常量。

例如,假设有一个整型数组a,可以定义一个指向该数组的const指针:

代码语言:c++
复制
int a[] = {1, 2, 3, 4, 5};
const int* ptr = a;

这样,ptr指向的值不能被修改,但是可以改变ptr指向的地址:

代码语言:c++
复制
ptr++; // 指向a[1]

如果要将ptr指向的值也变成常量,可以使用const修饰指针本身:

代码语言:c++
复制
int a[] = {1, 2, 3, 4, 5};
int* const ptr = a;

这样,ptr指向的值可以被修改,但是ptr指向的地址不能被改变:

代码语言:c++
复制
*ptr = 10; // 修改a[0]的值
ptr++; // 编译错误,ptr指向的地址不能被改变

因此,在使用const指针时,需要根据具体的需求来选择是否将指针本身也变成常量。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

this指针和const

this指针和const 目录 ? this指针 this 是 C++ 中的一个关键字,也是一个 const 指针,不可以修改指向。this指针指向当前对象,通过它可以访问当前对象的所有成员。...const关键字在C语言中的应用 常类型是指使用类型修饰符const说明的类型,常类型的变量或对象的值是不能被修改的 const的普通用法 int const index = 10; //const...; //const修饰 *p const int* p; //常量指针 不能通过指针修改p指向的内容(不能修改指向的内容) 指针常量 const 修饰 p int temp =10; int...: 是因为this指针的修饰符不同,在const成员函数里面的this指针被const修饰,在const成员函数里面调用非const成员函数时,相当于将const修饰的this指针传给非const成员函数...{ cout const:fun" << endl; } this可读写代表可以访问和修改this里面的成员变量的值 this可读代表可以访问this里面的成员变量的值 非常成员函数可以调用常成员函数

1.5K30
  • 指针(二) - (const)指针与常量

    const使用 声明一个常量 关键字const用来告诉编译器一个一旦被初始化过的变量就不能被修改 int a; const int n; 一 常量指针 指针指向一个常量 修饰指针指向 #include...("%d\n", num); int const* p3 = # //*p3 = 100; printf("%d\n", num); return 0; } // 不能通过指针修改指向的内容...(必须初始化变量) // 可以改变指针指向 二 指针常量 指针本身是一个常量 修饰指针本身 // 指针常量: int a = 0; int* const pa = &a; // pa = NULL; *...pa = 100; // 可以通过指针修改指向的内容 // 不能改变指针指向(必须初始化指针) 三 常量指针常量 指针本身是一个常量,指向一个常量 同时修饰 // 常量指针常量 const int b...= 0; const int * const pb = &b; // pb = NULL; // *pb = 0; // 不能通过指针修改指向的内容(必须初始化变量) // 不能改变指针指向(必须初始化指针

    41730

    C:数组与指针,指针与const

    比如定义指针 p 指向数组 a 的第三个单元。 int a[5];int p=&a[2];//如果对指针 p 赋值,则是更改 a[2]的值。...1.指针是 const 顾名思义,就是指针是一个常量,指针本身无法被改变,数组就是一个很好的例子,它就是一个常量指针,所以我们无法对他进行更改。...如以下代码: int a=10; int * const p=&a; *p=25;//通过,因为我们改变的是指针所指向地址所对应的值a,a并不是一个常量。 p++;//Error!...但我们如果对 p 进行更改,是可以通过的。 p=p+1; 3.变量是 const 如果一个变量是 const,那么我们通过指针不能够修改变量,并且变量本身在定义后也不能被赋值。...const int a[10]={5}; 此时数组中任意单元的值将无法被改变,以下代码将无法通过编译器: const int a[10]={5}; a[2]=1;//Error!

    81610

    const修饰指针变量详解

    对于指针的认识,应该很多时候都是从C语言开始,那么const修饰的指针变量到底与指针变量有点什么区别呢?...“` const char *ptr; char const *ptr; char * const ptr; “` 上面三个const修饰的指针变量到底有点什么区别呢?...const 修饰的只是*ptr,*ptr呢?其实就是一个指针变量指向的内存区的内容,被const修饰之后,那么这个内存区的内容就不能够被修改了,但是指针的指向是可以被修改的。...对于**char * const ptr;**中的const修饰的就是ptr,ptr是什么呢?ptr不就是指针变量所存放的地址嘛?...加上const进行修饰之后,那么这个指针变量所存放的地址就不能够被修改了,但是指针指向的内容是可以被修改的。

    34720

    const与指针交集的那些事

    指针也是一个变量,它有它的地址,也有自己的值,只不过它的值是别人的地址。而且这个值是可以改变的。 1.const修饰指针 常量指针:指针指向的值不可以改,指针的指向是可以更改的。...=&a; //const修饰指针,指针指向的值不可以改,指针的指向可以改 // *p=20;错误 cout 指针指向的值:"<< *p <<endl; p=&b; cout 指针指向后的值...2.const修饰常量 指针常量:指针的指向不可以更改,但指针指向的值是可以更改的。...3.const修饰指针和常量 常量指针常量:指针的指向和指向的值都是不可以更改的。...修饰指针和常量 //指针指向和指向的值都不可以更改 const int *const p2=&a; //p3=&b;错误 //*p3= 30;错误 cout <<

    29941

    const修饰的双重指针赋值解惑

    原来还是const修订符搞的怪: 第一段代码中: cp是一个指向char类型的指针。...ccp是一个const修饰符修饰的指向char类型的指针,也就是说,它指向的是char类型,但是指针本身是不可修改的。...在ANSI C标准中,有这么一段: 两个操作数都是指向有限定符或无限定符的相容类型的指针,左边的指针所指向的类型必须具有右边的全部限定符。...也就是说: ccp是一个指向有const修饰符的指针,cp是一个指向没有const修饰符的指针。ccp中包含了cp的所有修饰符(其实cp就没啥修饰符),因此可以进行赋值。...这样,我们看一下面的代码: c是一个指向char类型指针的指针。 cc是一个指向const修饰符修饰的char类型的指针的指针。 cc 与 c指向的内容并不相同,因此无法进行赋值操作。

    1K90

    EasyC++28,const和指针

    关于使用const来修饰指针,有两种不同的方式。第一种是让指针指向一个常量对象,这样可以防止使用该指针进行修改指向的值。第二种则是将指针本身声明为常量,可以防止改变指针指向的位置。...另外还有一个很有意思的点,如果我们将一个非const类型的变量赋给了const类型的指针,虽然我们无法通过指针修改对应的值,但是通过变量修改却是可以的: int age = 23; const int*...p = &age; *p = 233; // 非法 age = 233; // 合法 还有,我们无法修改指针指向的值,但是修改指针指向的位置是可以的: int age = 23; int price...int age = 23; int* const p = &age; 但是我们修改指针指向的值是可以的: *p = 2333; // 合法 指针和内容都不可变 当然我们也可以将两种const叠加使用...,让指针指向的对象以及对象的值都不可修改: const int * const p = &age;

    15620

    【C语言】const修饰指针的不同作用

    我们知道变量的值是通过地址存储的,所以我们是否可以通过地址对n进行修改呢?...); return 0; } 通过上面示例,我们定义一个指向整形的指针p,并指向n的地址,通过解引用操作符对n处地址的值进行修改,运行后可以发现可以成功运行,并且成功修改了n的值,结果如下...我们对变量n用const修饰目的就是为了不让n的值改变,如果p拿到n的地址就能修改n,这样就打破了const的限制,这是不合理的,所以应该让p拿到n的地址也不能修改n,那接下来怎么做呢...上一行的*p可以运行无报错说明通过解引用操作符可以改变p指向的变量的值。...• const如果放在*的右边,修饰的是指针变量本⾝,保证了指针变量的内容(指针指向)不能修改,但是指针指向的内容,可以通过指针改变

    10710

    【C 语言】const 关键字用法 ( 常量指针 - const 在 * 左边 - 修饰数据类型 - 内存不变 | 指针常量 - const 在 * 右边 - 修饰变量 - 指针不变 )

    文章目录 一、const 普通用法 二、常量指针 ( 指向 常量 的指针 | 被指向的内存不能被修改 ) 三、指针常量 ( 指针不能被修改 ) 三、指向 常量 的 指针常量 四、const 在 * 左右的意义...| 被指向的内存不能被修改 ) ---- 下面的 c 是 指向 常量字符 的指针 , const char 表示 常量字符 , const char * 表示 指向 常量字符 的指针 ; 该指针 指向的...指向的内存空间 ; const 在 * 右边 ( 指针常量 | const 修饰的是变量 ) : const 修饰的是 指针变量 , 如 char * const d , const 修饰的是 char...* , 指针不能被修改 ; 这是 指针常量 ; const 在 * 左边 ( 常量指针 | const 修饰的是数据类型 ) : const 修饰的是 指针变量 指向的内存空间 , 如 const char...*c , const 修饰的是 char , char 数据不能被修改 , 这是 常量指针 , 指向常量的指针 ; const 修饰的是右边的内容 , 右边是 变量 , 相当于 const 在 * 右边

    2.3K20

    指针详解(const、指针运算、数组名的理解、传址调用和传值调用、一维数组的本质​)(一)

    一、const修饰指针 const修饰指针 const(常量,不变) 问:被const是否修饰的变量是否有其他方法修改值?...答:可以通过指针的方式绕过a修改其值 int main() { const int a = 10; int* pa = &a;//虽然说对a进行了限制,但是此处绕过了a,去修改值 *pa = 0;...printf("a = %d\n", a); return 0; } const修饰指针的时候 1.const可以放在*的左边 2.const可以放在*的右边 1.const放在*的左边 int...0; } 2.2指针与指针的运算 指针减去指针的得到的是他们之间的元素个数的绝对值 指针-指针运算的前提条件的:两个指针指向同一块空间 int main() { //指针 - 指针 = 地址...:传的是地址 6.1模拟strlen函数 int my_strlen(const char* s) //const此处保护arr[]中的值,防止被修改 { //size_t = unsigned

    19610

    const修饰符的使用(修饰结构体指针,引用外部的const 变量)

    const修饰符的使用 //const修饰变量为只读 const int a = 10; a = 20;//是错误的赋值 //指针变量 指针指向的内存 两个不同的概念 char buf[] =..."helloworld"; //从左往右看,跳过类型,看修饰那个字符 //如果是*,说明指针指向的内存不能改变 //如果是指针变量,说明指针的指向不能改变,指针的值不能修改 const char *p...是对指针指向的内存空间的内容进行封锁。 const封锁的是指针变量,不能修改其指向,但是可以修改指针指向内存当中的内容。...//结构体指针的指向不可以修改 p = NULL是错误的 //结构体指针指向的内容可以修改 p->a = 10是可以修改的 } void fun4(const my_struct * const...p) { //结构体指针的指向不可以修改 //结构体指针指向内存当中的内容也不可以修改 } 如何引用其他.c文件中的const变量 extern const int a;//注意,不能再进行赋值

    55010

    Mac上更改鼠标指针外观

    Mac上更改鼠标指针外观 前言: 此教程在Mac上更改鼠标外观,是基于Mac上mousecape软件来进行的 需要的鼠标外观材料来源于Windows的鼠标指针文件(.ani后缀),将其先转化成每一帧的...gif文件,再借助PS将gif文件拼接成为竖版长png,最后导入mousecape进行设置 另外,mousecape只能生效更改后的图标,如果一些指针图标并未设置,是不会显示的,这也是本人后期放弃使用的原因...(即不实用,我还是老实选择了原生指针,这一点上Windows自定义做的真好) mousecape下载地址_GitHub 1.ani文件分帧转化为gif文件 选择想要更改的鼠标指针文件,此处使用的是【无职转生...进行转化: 完成后可以在下方输出栏中看到,然后选择“split”,将git分帧 点击图示选项,下载文件图集压缩包 建议对于压缩包进行重命名,并且命名中包含下图中的“frames”对应的值,此为gif图片原本的帧...ps打开(此处我是在Windows上操作的,Mac同理) 选择右上角的搜索,输入“RGB”,选择“RGB颜色” 选择左上角“图像”,更改画布大小,更改纵向的大小,设置为单张gif的长度 ✖️ gif数

    1.4K10

    C++随记(五)---const 与 指针

    含义为: 不能通过指针pt来改变year的值!但是!我可以直接通过year本身来改变它的值。...month来修改它的值,也不能通过它的地址修改它的值,这样这个变量在正常情况下就形成了“绝对防御”了,我无法改变它的值。    ...因为我第一句已经说了是一个const int,但是如果我允许指针来修改它的值的话,那岂不是实力打脸了? 综上,当变量和指针分别为const情形这2x2=4种情况要区分好。...这里还要注意一点,上述说的是不能通过指针来修改变量,然后也说了可以通过变量本身来修改变量, 但是 还应该补充一点,相信大家也应该会想到这样的情况,就是是否可以修改指针自己的值? 答案是:可以!...所以情况1中,我的用于是指向const对象的指针,强调的是对象是const的,而情况2中,我们就应该说是const指针,因为指针本身是const 的。

    59400

    C语言: const关键字与指针

    const修饰指针的4种形式 const关键字,在C语言中用来修饰变量,表示这个变量是常量。 const修饰指针有4种形式,区分清楚这4种即可全部理解const和指针。...*p1; // p本身不是cosnt的,而p指向的变量是const的 // 第二种 int const *p2; // p本身不是cosnt的,而p指向的变量是const的 // 第三种...int * const p3; // p本身是cosnt的,p指向的变量不是const的 // 第四种 const int * const p4;// p本身是cosnt的,p指向的变量也是const...// error: assignment of read-only variable ‘p4’ *p4 = 5; // error: assignment of read-only loc 关于指针变量的理解...,主要涉及到2个变量: 第一个是指针变量p本身,第二个是p指向的那个变量(*p)。

    66610

    指针讲解:*&p和&*p 及const的用法总结

    ---- (1)const int *p; int const *p; //含义是指向常量的指针,指针的常量值不可以修改 两者相同,p是一个指向整形常亮的指针,可以修改指针的值,但不能修改指针所指向的值...int b = 5; int c = 3; const int *p=&b; *p=6; //错误,不能通过指针修改所指向的值; p=&c; //正确,可以修改指针的值 (2)int * const p...; //含义是常量指针,p的值不可以修改 p是一个指针,指针p是常量,它的值无法修改,但是可以修改p所指向的整型的值。...int b = 5; int c = 3; int *const p = &b; *p = 6; //正确,可以修改指针所值向的值 p =&c; //错误,不可以修改指针的值 (3)const int...* const p; 无论是指针本身还是它所指向的值都是常量。

    59810
    领券