首页
学习
活动
专区
工具
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; // 不能通过指针修改指向内容(必须初始化变量) // 不能改变指针指向(必须初始化指针

    41430

    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!

    81210

    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进行修饰之后,那么这个指针变量所存放地址就不能够被修改了,但是指针指向内容是可以被修改

    34420

    const修饰双重指针赋值解惑

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

    99490

    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 <<

    29641

    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如果放在*右边,修饰指针变量本⾝,保证了指针变量内容(指针指向)不能修改,但是指针指向内容,可以通过指针改变

    8810

    【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 在 * 右边

    1.4K20

    指针详解(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

    18510

    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;//注意,不能再进行赋值

    54310

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

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

    58000

    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数

    1K10

    指针讲解:*&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; 无论是指针本身还是它所指向都是常量。

    56710

    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)。

    64210
    领券