什么是常量指针,指针常量?
的有关信息介绍如下:首先,定义一个常量的关键字是const ,其实这里面有一个被大家都默认为正确的错误,那就是用const定义的常量,其本质还是一个变量,因为内存会分配地址给保存起来,如果用define定义的常量才是真正的常量,这个内存是不会分配空间的,那怎么区别呢,因此内行人都将用const定义的成为只读变量,只读的意思就是只能读取他的值,而不能重新给他赋值。记住了哦~这个问题说难也难,说简单也简单,看下边答案的时候要记住,指针是一个变量,他有自己的内存空间,保存的是他指向变量的地址,记住,指针的值是地址,这样理解。1.常量指针 指的是指针的值是不能被改变的,就是指针的值是常量,假设int *const p;关键点来了: const 修饰的是p,p是一个指针,我们知道指针也是一个变量,内存也会分配空间给他,他里面存的是地址,这样我们根据const关键字的属性就知道了: 指针变量p里面的值是不能改变的,指针变量里面是什么呢? 对,是地址。正是由于他是不能改变的,所以我们一定要在定义的时候初始化,比如 int i=20; int *const p= &i以下操作: p =&i2 不行,因为p的值是不能改变,就是他不能指向别的地址。 *p =100; 正确,因为他改变的不是p的值,而是相当于改变他指向的变量的值。2.指针常量形式 int const *p ;注意,const 关键字,int的位置可以互换,不影响,注意*号与const的位置关键点: const 修饰的是 *p (这个是重点);我们知道p里面是一个地址,那么*p就是他所指向的地址里面的数据,是一个值,不是一个地址了。那是什么意思了,const的意思你还记得吗?就是定义一个只读的变量,就不不能改变他值的变量,那么这条语句的意思就是:*p的值是不能改变的:假设下面语句int i1 = 30; int i2 = 40; const int *pi = &i1 pi = &i2 /* 注意这里,pi可以在任意时候重新赋值一个新内存地址*/ i2 = 80; /* 想想看:这里能用*pi = 80 来代替吗?当然不能!*/ printf("%d\n", *pi); /* 输出是 80 */ 语义分析: 看出来了没有啊,pi 的值是可以被修改的。即它可以重新指向另一个地址的,但是,不能通过*pi 来修改 i2 的值(这句话是关键)。不能通过*p的方式来改变并不是说i1,i2不能改变,就是他指向的变量的值是可以改变的,但是不能通过*p = 40 的方式来改变。这个问题花了我好久才弄明白,楼主自己再琢磨琢磨,可以到机器上去实验已下,印象更深刻~祝你进步!