关于常量指针什么不能修改的信息

http://www.itjxue.com  2024-06-13 16:06  来源:IT教学网  点击次数: 

常量指针与指针常量的区别

1、区别:本质 指针常量:本质上一个常量,指针用来说明常量的类型,表示该常量是一个指针类型的常量。常量指针:本质上是一个指针,常量表示指针指向的内容,说明该指针指向一个“常量”。地址 指针常量:在指针常量中,指针自身的值是一个常量,不可改变,始终指向同一个地址。

2、常量是形容词,指针是名词,以指针为中心的一个偏正结构短语。这样看,常量指针本质是指针,常量修饰它,表示这个指针乃是一个指向常量的指针(变量)。指针指向的对象是常量,那么这个对象不能被更改。

3、常量指针!如 int b, c; int * const a = 表示a是一个常量指针它指向变量b的内存。但是因为是常量指针所以不能再用a指向其他变量,如 a = 错误!可以修改指向内存的值,如:*a = 20; BTW 常量指针声明的时候必须向我那样赋初值。

4、const 在 *前面,是常量指针,const在*后面,是指针常量。③这二者的区别就是:const int *p 指向的是 const int a=2;的p可以变化但是*p不可以变化。而int * const p= 意思是描述的是p,p不可变,就如const int a=2; a的值就不能再改变了。那么p不可以变,但是*p可以变。

5、引用 相当于常量指针。 不过使用起来不需要*, 所以更简洁。常量指针,是指针指向的是常量, *p不可改变。const char *p;或者char const *p;指针常量, 是指针本身是常量, p不可改变。

6、定义指向字符常量的指针 const char * 和 char const * 是等价写法 2)指针常量(国内有人称为常量指针)char * const 区分指向常量的指针和指针常量的方法是:看const关键字在*的左侧还是右侧,如果是左侧则属于1),如果是在右侧则属于2)。

C语言,用指针方式定义的字符串为什么不能修改?

1、指向字符串常量的话,这段常量字符串是存储在静态存储区的,内容不能修改。

2、其本质就是常量值不可修改。C语言中定义为常量的值,是不允许被修改的,这是一个规则。如果有修改需求,就不要定义为常量,而是定义为变量。在运行时,常量字符串会被存储于特定的常量空间,这段空间的特性就是只读的,任何修改操作,均会引起整个程序崩溃。这也是C语言保证常量不可修改的一个手段。

3、它指向的内容也不可通过这个指针修改(用其他方法修改内容仍然是可以的)。数组名是常量指针,所以指针不能再指向别处(即改变指向)。这个问题中,p是普通指针,所以可以改变指向;p指向的内容是由malloc申请的自由空间,所以它们的内容肯定是能够改变的,否则申请这个空间就没有多少意义了。

4、为什么不能修改:其实不一定,不让修改是一种保护。Linux kernel前一阵子报告的严重问题的就是可以修改这个东西了。如果能够修改,这个ch=abcdefg的语义就不正确了。

指针什么可以改变什么不可以

1、这个是常量指针的说法。 意思是指向常量的指针。比如 const char * p=abcd;可以做p=mnop这样的赋值, 即可以改变p值。但不能做*p=s这样的赋值。即不能改变指向的数据。

2、指针也是个变量,存放的是个地址的值;作为变量来讲,它等于什么,当然可以变啦!对吧!至于数组,分为静态数组、动态数组。静态数组是在程序编译时,就分配了空间;而动态数组,是在程序运行时,分配的。数组名即为数组的首地址,一旦分配了,就不能改变的。

3、指针指向的地址可以改,但是指向的内容不能改。若有const char * p = def, 则p = abc正确,而strcpy(p,abc);错误。 const char* const,*的左右两边都有const,是指向常量字符串的指针常量。若有const char* const p = def, 则p = abc和strcpy(p,abc);都错误。

4、是的,不能,你的理解是对的。指针传递可以改变其指向地址的内容,但不能改变原指针的指向。如果需要改变指向,需要使用指向指针的指针作为参数。

5、通俗讲指针作形参,形参里存储的是地址的值,这个值与实参的某个变量的地址是一样的,所以当改变形参所指向的地址里存的数据,其实改变的就是实参那个变量的值。而普通变量作形参,与实参中的变量其实是使用不同的存储空间,所以当形参的值发生改变时,实参所在存储空间的值并没有发生改变。

6、const与指针搭配使用 用const修饰的变量必须在声明时进行初始化(用来修饰函数的形参除外)。 两个基础概念: 指针常量和常量指针。 指针常量:即指针本身的值是不可改变的,而指针指向的变量的值是可以改变的; 常量指针:即指针指向的变量的值是不可改变的,而指针本身的值是可以改变的。

指针常量和常量指针不是都可以改变地址的吗?

char * const,const在*的右边,是指向字符串的指针常量,指针指向的内容可以改,但是指向的地址不能改。若有char* const p = def, 则strcpy(p,abc);正确,而p = abc错误。 const char *,const在*的左边,是指向常量字符串的指针,指针指向的地址可以改,但是指向的内容不能改。

和常量指针相反,可以改变值但是不可改变指向地址。

指针常量是指--指针本身是常量。它指向的地址是不可改变的,但地址里的内容可以通过指针改变。它指向的地址将伴其一生,直到生命周期结束。有一点需要注意的是,指针常量在定义时必须同时赋初值。

指针里面所存储的内容(内存地址)是常量,不能改变。但是,对应内存地址里存的内容是可以通过指针改变的。它的声明方式是:数据类型 * const 变量名。以上就是常量指针和指针常量的区别,理解这些概念要注意避免混淆,可以根据具体的情况选择合适的方式使用。

C语言里为什么字符指针变量指向的字符串常量中的内容是不可取代的?

1、C语言中定义为常量的值,是不允许被修改的,这是一个规则。如果有修改需求,就不要定义为常量,而是定义为变量。在运行时,常量字符串会被存储于特定的常量空间,这段空间的特性就是只读的,任何修改操作,均会引起整个程序崩溃。这也是C语言保证常量不可修改的一个手段。

2、这取决于初始化的对象,如果你用字符串去初始化一个字符指针,如char*b,那么那个字符串存储在内存的静态存储区,初始化之后就不能修改了,就是个常量,这个指针指向这个常量字符串的首地址,则b[2]就是看那个静态区里面的一个字符,但是不能修改它。数组的初始化在栈空间里面,是可以修改的。

3、本身默认的就是一个字符串常量,他的值不容修改,p只是一个指针,执行该字符串的首地址,对该地址的值指向的地址空间的值的改变也是不允许的。

4、问题中 p2 不可变,p2++是错误的。再比如 下面定义了一个指向字符串常量的指针: const * ptr2 = stringprt1; 其中,ptr2 是一个指向字符串常量的指针。ptr2 所指向的字符串不能更新的,而 ptr2 是可以更新的。 因此, *ptr2 = x; 是非法的,而: ptr2 = stringptr2; 是合法的。

5、它指向的内容也不可通过这个指针修改(用其他方法修改内容仍然是可以的)。数组名是常量指针,所以指针不能再指向别处(即改变指向)。这个问题中,p是普通指针,所以可以改变指向;p指向的内容是由malloc申请的自由空间,所以它们的内容肯定是能够改变的,否则申请这个空间就没有多少意义了。

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

其本质就是常量值不可修改。C语言中定义为常量的值,是不允许被修改的,这是一个规则。如果有修改需求,就不要定义为常量,而是定义为变量。在运行时,常量字符串会被存储于特定的常量空间,这段空间的特性就是只读的,任何修改操作,均会引起整个程序崩溃。这也是C语言保证常量不可修改的一个手段。

指向字符串常量的话,这段常量字符串是存储在静态存储区的,内容不能修改。

问题中 p2 不可变,p2++是错误的。再比如 下面定义了一个指向字符串常量的指针: const * ptr2 = stringprt1; 其中,ptr2 是一个指向字符串常量的指针。ptr2 所指向的字符串不能更新的,而 ptr2 是可以更新的。 因此, *ptr2 = x; 是非法的,而: ptr2 = stringptr2; 是合法的。

指向常量的指针,意思是这个指针不能改变指向的变量的值,是只读的意思。但变量的值可以通过其他方式改变改变。

int* const aptr这样才是定义常量指针,这时候aptr=就会出错了。指向常量的指针表示不能通过这个指针去修改其内容,比如第一种情况,aptr[0] = 3;这就会出错。而aptr[0]和aptr+1表示不同地址这是没有错误,因为你做的是地址加1操作,并没有通过这个指针去修改里面的内容。

(责任编辑:IT教学网)

更多

相关Fireworks教程文章

推荐Fireworks教程文章