常量指针和指针常量

1、常量指针(指针可改,指针指向的对象不可改)

常量指针本质是指针,用const修饰它,表示这个指针乃是一个指向常量的指针。指针指向的对象是常量,那么这个对象不能被更改。

表示方法:

const int * ptr

int const * ptr

 

int a = 5;

const int* c = &a; //合法

*c = 6; //非法

 

char *str1, *str2;

str1 = "abcde1234";

str2 = "bcde";

int strcmp(const char *str1, const char *str2); //表示在该函数里不会对形参的字符串内容进行修改

 

2、指针常量(指针不可改,指针指向的对象可改)

变量能修改,常量不可修改。所以指针变量能改指向,指针常量不能改指向。

(1)指针常量的本质是一个常量,而用指针修饰它,那么说明这个常量的内容应该是一个指针。另外,数组名是一个指针常量。

表示方法:

int* const ptr

 

(2)因为指针常量是一个常量,在声明的时候一定要给它赋初始值。一旦赋值,以后这个常量再也不能指向别的地址。

 

(3)指针常量的值是指针,这个值因为是常量,所以不能被赋值。

int a;

int* const p = &a; //初始化指针常量

int* q;

p = q; //非法,把上面的const去掉就合法了

 

 

(4)虽然指针常量的值不能变,可是它指向的对象是可变的,因为我们并没有限制它指向的对象是常量。

int a = 100;

int* const p = &a; //初始化指针常量

*p = 50; //合法

 

3、指向常量的指针常量(指针不可改,指针指向的对象也不可改)

指向常量的指针常量就是一个常量,且它指向的对象也是一个常量。

表示方法:

const int * const ptr

int const * const ptr

 

因为是一个指针常量,那么它指向的对象当然是一个指针对象,而它又指向常量,说明它指向的对象不能变化。

const int a = 25;

const int * const b = &a; //初始化

*b = 50; //非法

int * p;

b = p; //非法

 

4、一个例子

比如:

int a[10];

a++; //出错,不可修改,因为a是指针常量

 

转自:http://www.cnblogs.com/xiaozhihong/p/9536522.html

原文地址:https://www.cnblogs.com/huangzs/p/9648181.html