常量指针与指针常量(const用法)

来源:互联网 发布:支付宝的网络权限设置 编辑:程序博客网 时间:2024/05/29 19:36

初了解,const是在C语言中为了提高程序的安全性和可靠性而用来修饰数据类型的,const修饰的数据类型是指常类型,常类型的变量或对象的值是不能被更新的,即相当于限定为“只读”的状态。


指针常量

即指向常量的指针,该指针所指向的是一个常量,常量的值不能通过解引用来改变,但是这个指针的指向可以改变
如:

const int *pa;int const *pa;

这两条语句实现的功能是相同的,均声明了一个指向常量的指针,这个常量pa本身是先被赋值了的,就不能通过解引用来改变pa的值,即*pa=d(d是一个新的值)是错的,想要通过访问pa中存储的常量的地址来间接改变常量的值是不能实现的,但是pa=&d(d是一个已声明的变量或常量);就是对的,因为指针的指向可以改变,指针内储存的地址是可以改变的。


常量指针

常量指针即指针本身的值是常量,即他储存的地址一旦定了就不能改变,但可以通过解引用来改变指针所指向的变量的值,即可以通过访问这个固定的地址来间接改变变量的值。
如:

int *const pa =&n;

这条语句的意思就是声明了一个常量指针pa初始化指向的是n,那么他就只能指向n,而不能再指向其他的变量了,即pa=&c(c是其他已声明的变量)就是错的不能实现的,但是可以通过解引用来改变变量的值,即*pa=d(d是已声明的整型变量)是可实现的,相当于通过访问指针储存的地址即n的地址来改变变量n的值。


技巧

在了解这个概念时,有看到一些前辈给的经验技巧来使这个概念变得通俗容易区分。
1.有说看const离谁更近一点,在忽略数据类型的情况下离变量近,那他限定的就是指针,即为常量指针,离指针*更近,那他限定的就是变量的值,即为指针常量。
2.也有说,看const在 * 的哪一侧,若const在 * 号的左侧,那么就是指针常量,若const在 * 的右侧,则为常量指针。
判断方法各有不同,但原理都是一样的。


例题

下列哪两个是等同的

int b;

A const int* a = &b;

B const* int a = &b;

C const int* const a = &b;

D int const* const a = &b;

解析:答案应该是CD。A选项声明的是指向常量的指针,即指针常量;B选项是一个错误的表示方法;C选项和D选项都表示声明的是指针本身为常量,他所指向的也是一个常量

0 0
原创粉丝点击