原创
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所指向的对象都是只读的。
测试程序如下:(只考虑该测试主题,忽略其他规范)
View 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;
}
文章评论(0条评论)
登录后参与讨论