原创 const与指针的几种结合方式

2011-5-25 15:02 3561 10 10 分类: 软件与OS

有如下几种const和指针结合的声明:

1.const int *ptr;

2.int const *ptr;

3.int *const ptr;

4.const int *const ptr;

5.int const *const ptr;

 

  其中,1,2两种声明表示ptr指向的对象是只读的,但是ptr本身是可以改变的(即可以指向其他内容);

3声明表示ptr本身是只读的(即不能改变其值,也就是不能改变其指向);4,5两种声明表示ptr本身和ptr所指向的对象都是只读的。

 

  测试程序如下:(只考虑该测试主题,忽略其他规范)

 

ContractedBlock.gifExpandedBlockStart.gifView Code
#include<iostream.h>

int main()
{
int a=1;
cout
<<"a的地址为:"<<&a<<endl;

const int *ptr=&a;
cout
<<"ptr的值为:"<<ptr<<endl;

//*ptr=10;//error C2166: l-value specifies const object

int const *ptr1=&a;
cout
<<"ptr1的值为:"<<ptr1<<endl;
//*ptr1=10;//error C2166: l-value specifies const object

int b=2;
cout
<<"b的地址为:"<<&b<<endl;
ptr
=&b;
cout
<<"ptr的值为:"<<ptr<<endl;
ptr1
=&b;
cout
<<"ptr1的值为:"<<ptr1<<endl;

//上面的例子说明了形如const int *ptr和int const *ptr的指针定义,
//表明指针所指向的对象是只读,但指针本身可以改变。

int * const ptr2=&a;
cout
<<"ptr2的值为:"<<ptr2<<endl;
*ptr2=10;
cout
<<"*ptr2的值为:"<<*ptr2<<endl;
//上面的例子说了形如int *const ptr2的指针定义,
//表明指针本身不能改变,是只读的,但是指针所指向的对象是可以改变的。

const int * const ptr3=&a;
cout
<<"ptr3的值为:"<<ptr3<<endl;
//*ptr3=10;//error C2166: l-value specifies const object
//ptr3=&b;//error C2166: l-value specifies const object
int const *const ptr4=&a;
cout
<<"ptr4的值为:"<<ptr4<<endl;
//*ptr4=10;//error C2166: l-value specifies const object
//ptr4=&b;//error C2166: l-value specifies const object
//上面的例子说明了:形如const int *const ptr和int const *const ptr的指针定义,
//表明指针本身和指针所指向的对象都是只读的。



return 0;

}
PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
10
关闭 站长推荐上一条 /3 下一条