关于const

来源:互联网 发布:金蝶erp软件二次开发 编辑:程序博客网 时间:2024/05/21 15:04

理解一:

1、const在*前,内容不能变;

const int * p1;//const修饰的是int * p1,说明这个变量是不能变的,就是p1所指向的变量是常量变量

       表示不能通过指针p1修改它指向的内存单元的值,但是p1本身可以修改。


int const *p2=&i; //与p1相同,const修饰的是*p2(表示所指向的变量)说明p2所指的变量不能改变,也就是指向常量变量;

不能修改p2指向的内存单元的值,但是可以修改p2使其指向其他的内存单元,这里p2指向了整形变量i。

所以p2=&j;修改p2,使其指向整形变量j,正确。

*p2=30;通过p2修改它所指向的内存单元的值,错误。


2、const在*后,指针不能变;

int *const p3=&i;//const修饰的是p3,说明指针变量的值不能改变,也就是不能让p3指针再指向其他值

p3本身指向整型变量的常指针,即p3初始化后不能再指向其他的内存单元,但是可以修改p3指向的内存单元的值。这里p3指向了整形变量i。

所以*p3=30;通过p3将变量i的值修改为2,正确。

p3=&j;修改p3,使其指向j,错误。



理解二:

const*,指针指向常量;const int * p1;//所指物是常量,而指针不是常量,可以不必须初始化。

int const *p2=&i;//p2取i的地址

*p2=30;//所指物是常量,所以错误

*const,指针本身为常量;int *const p3=&i;//指针本身为常量,必须初始化,且初始化为i的地址,不可修改

*p3=20;//修改p3所指向的内容

p3=&j;//指针自身是常量,所以错误

*const*,指针和所指物都是常量;


const int p1必须初始化,const int &p1必须初始化。



1 0
原创粉丝点击