首页 > C > 指针 阅读:57,774

常量指针与指针常量

试指出下面的指针的含义与区别:

 

1const int *a;

2int const *a;

3int * const a;

4const int *const a;

 

此题考查的是包含const关键字声明指针的含义。现分析如下:

 

1const int *a;   //指针常量,指针指向的变量不能改变值

2int const *a;   //指针常量,与const int *a等价

3int * const a;  //常量指针,指针本身不能改变值

4) const int *const a;//常量指针与指针常量

 

Bjarne博士在他的《The C++ Programming Language》里面给出过一个区别的方法:把一个声明从右向左读。例如:

 

char *const cp; ( 我们把“*” 读成 “pointer to )

cp is a const pointer to char //int* const指向常量的指针

const char * p;

p is a pointer to const char; //const int*常指针

char const * p;

 

同上因为C里面没有const *的运算符,所以const只能属于前面的类型。

int a[10];//数组是一个常量指针,等价于int * const a;a[0],a[1]

 

int * const a;//常量指针,指针不能改,但指向的内存能改

 

example:

int value = 5;

int *const a = &value;

int tmp = 100;

a = &tmp;//error

 

*a = 100;//right,value=100;

 

const int * a;//指针常量,指针能改,但指向的内存不能改

int const * a;

 

example:

const int value = 100;

const int * a = &value;

 

int tmp = 2;

*a = 5;//error

a = &tmp;//right

const int * const a;//a既是指针常量,也是常量指针,指针不能改,指向的内存也不能改

 

const int value = 1;

const int * const a = &value;

 

int tmp = 7;

 

a = &tmp;//error;

*a = 9;//error

 

//*读作pointer to

 

int * const p;//p is a const pointer to int

const int * p;//p is a pointer to int const

int const * p;//p is a pointer to const int

const int * const p;//p is a const pointer to int const

周哥教IT,分享编程知识,提高编程技能,程序员的充电站。跟着周哥一起学习,每天都有进步。

通俗易懂,深入浅出,一篇文章只讲一个知识点。

当你决定关注「周哥教IT」,你已然超越了90%的程序员!

IT黄埔-周哥教IT技术交流QQ群:213774841,期待您的加入!

二维码
微信扫描二维码关注