常量指针指向的值不能改变指针常量不能再指向其他地址(vc++里const问题)

本文目录
vc++里const问题
const char *str_const1;
这个是常量指针,说明指针指向的是一个常量,不可通过指针来修改指针指向的值,即*str_const1=’y’是错误的,但是可以改变指针指向的地址,即str_const1="xyz"是正确的
char * const str_const2;
这个是指针常量,说明指针是常量,也就是不能改变指针指向的地址,即str_const2="abc"是错误的,但是可以修改指向地址的值,即*str_const2="a"
问题来了,按照这么说,str_const2=’y’应该是正确的,错
还有一个原因,"abc"这么写,就是一个常量,常量就表示它的值不能改变,故str_const2=’y’错误
如果这个就可以
char a = {’a’, ’b’, ’c’};
char * const str_const2 = a;
str_const2 = ’y’;
这样就正确
每个编译器的规范不太一样,虽然都是C99的标准,但都有一些不同
指针常量和常量指针不是都可以改变地址的吗
char * const,const在*的右边,是指向字符串的指针常量,指针指向的内容可以改,但是指向的地址不能改。若有char* const p = "def", 则strcpy(p,"abc");正确,而p = "abc"错误。 const char *,const在*的左边,是指向常量字符串的指针,指针指向的地址可以改,但是指向的内容不能改。若有const char * p = "def", 则p = "abc"正确,而strcpy(p,"abc");错误。 const char* const,*的左右两边都有const,是指向常量字符串的指针常量。若有const char* const p = "def", 则p = "abc"和strcpy(p,"abc");都错误。
C++中,关于const与指针
const int * p = &a 和 int const * p = &a是一样的效果,都是常量指针,指针P的值不可以修改。
int* const p = &a 是指向常量的指针,指向的常量值不可以改变。
希望这样说能听懂
为什么指向常量的指针不能修改该常量的值
常量在定义的时候,比如加上了const限定符,那么编译时,系统为其分配内存的时候会把它放在常量区,全局变量和静态变量放在静态区,new或者malloc出来的空间放在堆里,局部变量和函数参数放在栈里。常量区是只读的,编译系统限制了对它的写操作,所以光有指针是不能修改其值的。
C++指针问题 改错
前面加上const
const int *p=&x
p是一个指向整型常量的指针。它指向的值不能修改。所以*p=65;是错误的
常量指针就是中间加了个不可变的const。如:
int*const p=&x
p是一个指向整型的常量指针。它指向的值可以修改,但pTwo不能指向其他变量。所以p=&y是错误的
Const的特殊赋值方法:
Char S = “123”
Const char *A=s;//指向地址
strcpy((char*)A , ”ASD”);//合法
如何理解常量指针与指针常量
常量指针是指--指向常量的指针,顾名思义,就是指针指向的是常量,即,它不能指向变量,它指向的内容不能被改变,不能通过指针来修改它指向的内容,但是指针自身不是常量,它自身的值可以改变,从而可以指向另一个常量。
指针常量是指--指针本身是常量。它指向的地址是不可改变的,但地址里的内容可以通过指针改变。它指向的地址将伴其一生,直到生命周期结束。有一点需要注意的是,指针常量在定义时必须同时赋初值。
2.使用方法
写法上的区别:
常量指针:const 在*之前 指针常量:const在*之后。
使用举例:
(1) 常量指针使用:
如 int b, c;
int const *a;
a = &b
a = &c
都可以,唯独它指向的内容不能被修改。如:*a=20;这是违法的!错误!
(2) 指针常量使用
如 int a ,b;
int * const p = &a
表示p是一个常量指针它指向变量a的内存。指针常量不能再用p指向其他变量,如 p = &b 错误!可以修改指向内存的值,如:* p = 20; 指针常量声明的时候必须像上式那样赋初值。
指针常量也不能释放,用p指向NULL,即
p = NULL;
会在编译时报错
/opt/test/test.c:649: error: assignment of read-only variable `p’
还有一个记住他们不同形式的技巧!看const关键字,他后面的不可修改,如int * const a = &b 后面是a,则说明a不能修改!
int const * a = &b后面是*a则说明*a不可被修改!
指针常理是什么
区别就是,指针变量 就是这个指针是可以改变的,指针常量就是这个东西是不可改变的。
char* p; //p指向的内容可以改变
const char* p; // p指向的内容不可改变
char* const p; //p不可改变,但是p指向的值是可以被改变的
绕了半天,好像还是没有明白,对吧,为啥要整这些玩意呢?
老师上课也是讲这些玩意,讲了半天,大家头都晕了,还是没有明白,感觉就是文字游戏嘛。
忽然有一天,我恍然大悟了。为什么?因为现在的软件项目开发,是多个人一起完成的,不是你单枪匹马的干的。给你举个例子就明白了。
假定你开发的程序,提供一个接口,访问一个固定的端口,你用一个指针指向这个端口,初始化一些数据之后返回给调用者;另外一个人开发的程序是每次从这个端口读数据到内存里,可是他写程序的时候不小心,把这个指针改变了,结果本来从网卡读数据的,变成从USB读了,电脑没插USB,结果弹出一个xxxx内存不能为读,程序崩溃了。
这个时候你大骂他笨蛋,你为何改我的端口呢?他反驳你,说你开发的程序返回的是普通指针,没说不让改啊。啊,如果你当时开发的时候就把指针设定成不能改的,也就是const,那么别人就改不了,这个错误也就能得到避免,那么软件开发就不会有这么多问题了,程序也会更加稳定。

更多文章:
easyui和elementui哪个好(element-ui 可以做网站吗)
2026年10月10日 14:00
tcp ip协议体系大致可以分成(TCP/IP体系共有几个层次)
2026年10月10日 12:30
写出sql语句五个(帮忙写5个sql语句,全部写对给70分,写对一条给10分)
2026年10月10日 12:10
diversity and distribution(贵州省英文简介)
2026年10月10日 11:20
函数指针数组初始化(用C语言在主函数中定义和初始化一个二维数组a[3][4]和一个指针数组,采用指针数组去访问数组元素a[2][4])
2026年10月10日 09:40
android layout布局(如何让Android自适应不同分辨率或不同屏幕大小的layout布局)
2026年10月10日 06:20




