const修饰指针有两种情况,
情况一:是const修饰后无法改变指针所指向地址的内容,但指针可以指向其它地址,即指针自身可以被改变。
int a = 1;
int b = 2;
const int *pa = &a;
*pa = 3; //报错
pa = &b;
指针pa指向了变量a的地址,指针自身的值此时等于a的地址,此时的const写法,const int pa = &a;表示pa指向的a的地址所存放的值无法修改,所以*pa=3;在试图通过pa修改a的值时,会报错,而pa=&b改变的是指针pa的值,所以不会报错。
情况二:另一种是无法修改指针所指向地址,即指针自身不能被改变,但可以修改所指向地址的内容。
int a = 1;
int b = 2;
int * const pa = &a;
*pa = 3;
pa = &b; //报错
指针pa指向了变量a的地址,指针自身的值此时等于a的地址,此时的const写法,int * const pa = &a;const修饰指针自身,pa自身的值无法修改,所以**pa=3;在试图通过pa修改a的值时,不会报错,而pa=&b改变的是指针pa的值,所以会报错。
const修饰指针
int a = 1;
int b = 2;
const int * const pa = &a;
*pa = 3; //报错
pa = &b; //报错
此时指针自身的值无法改变,指针指向的地址的内容也无法改变。
*pa=3;和pa=&b;在试图通过指针pa修改a的值和pa自身的值时都会报错。
网友评论