为什么指向常量的指针不能修改该常量的值

如题所述

常量在定义的时候,比如加上了const限定符,那么编译时,系统为其分配内存的时候会把它放在常量区,全局变量和静态变量放在静态区,new或者malloc出来的空间放在堆里,局部变量和函数参数放在栈里。常量区是只读的,编译系统限制了对它的写操作,所以光有指针是不能修改其值的。
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-08-20
指向常量的指针当然不能修改常量的值,因为常量是不能改变的量!不理解没关系,记住就可以,使用const限定符主要是避免意外,比如一不小心修改原始数据的值,const只是给编译器提个醒
第2个回答  2010-08-20
常量即是一个定值,既然是指向常量的,那么又怎么可以修改呢?可以修改的应该是变量,而不是常量。楼主要理解常量和变量的区别。
第3个回答  2010-09-03
指针变量和指针常量存放的都是地址值,但指针常量存放的地址值保持不变,即该例中p的值始终是变量i的地址i,*p表示i的值,即*p=i,而变量的值是可以改变的,故可进行操作*p=0;本回答被提问者采纳
第4个回答  2010-08-20
又匿名又0分.最憎这种人了

为什么指向常量的指针不能修改该常量的值
常量在定义的时候,比如加上了const限定符,那么编译时,系统为其分配内存的时候会把它放在常量区,全局变量和静态变量放在静态区,new或者malloc出来的空间放在堆里,局部变量和函数参数放在栈里。常量区是只读的,编译系统限制了对它的写操作,所以光有指针是不能修改其值的。

为什么指向常量的指针,常量值可以变动
指向常量的指针,指向的内容不可以改变,但指针变量的内容是可以改变的,可以改成指向另外位置的数据(不一定非得是常量)

...定义的字符串可以修改,而用指针定义的不能修改?
所以第一种指向了常量区,无法修改;第二种定义了普通的数组变量,放在栈中,可以修改

详解C语言指针与常量的关系
例如,常量指针`const double *p`不会允许通过`p++`来改变它所指向的值,即使这可能导致指针指向下一个元素。在函数参数中,使用常量指针可以明确表示函数不会通过指针修改传入的数据。区分指针常量和指针的关键在于`const`的位置。常量指针的`const`放在类型声明前,表示指向的元素不可变,而指针常量的`c...

指向常量的指针和常量指针的区别
第一个是限定x指向的对象的值不能修改,第二个是限定x的值不能修改,也就是说,x指定的对象不能修改。

为什么说C语言中常量不能改变?可以改变啊,比如我写代码的时候,本来写...
问题中 p2 不可变,p2++是错误的。再比如 下面定义了一个指向字符串常量的指针: const * ptr2 = stringprt1; 其中,ptr2 是一个指向字符串常量的指针。ptr2 所指向的字符串不能更新的,而 ptr2 是可以更新的。 因此, *ptr2 = "x"; 是非法的,而: ptr2 = stringptr2; 是合法的。

常量指针是不是不能给非常量指针赋值
那么prr是个指向整数常量的指针。假设 int a;prr=&a;如果允许pr=prr,那么通过pr指针就可以修改a,比如 *pr=10;这违背prr的定义,为防止绕道修改a值而出现错误乱,编译器就会提示错误。如果你只是想限定prr本身不可修改,可以这么写 int a;int *pr;int * const prr=&a;pr=prr;将const写在...

常量指针与指针常量的区别
首先,常量指针是指向常量的指针,其修饰的是指针所指向的数据,而不是指针本身。这意味着通过该指针,我们不能修改所指向的数据的值,但可以改变指针的指向。例如,const int *p,这里的p是一个指向const int的指针,我们不能通过p来修改它所指向的int值,但可以修改p使其指向另一个int常量。其次,...

c语言中,为什么不能对字符指针变量指向的字符串再赋值?
因为C语言中,凡是以""括住的形式直接出现,而且你又没有为其分配内存空间的字符串都是常量字符串,是不能修改其值的。这样:char a[6]="hello";a[2]='c';就可以了。这里你为hello分配了一个长度为6的字符数组空间来存放。

c++指针和字符串的问题 紧急!!! 高手请进
你对char *型的a 进行"abcdefg"的赋值,"abcdefg"存在静态区,是常量,不能改变,所以下面的a[0]='b'是错的,它在试图改变常量的值。

相似回答