鹰之歌

既然你崇拜鹰,就要像鹰一样翱翔天际,俯瞰大地。哪怕会摔的粉身碎骨。

导航

const与指针

有如下几种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;

}

posted on 2011-05-25 15:03  鹰之歌  阅读(246)  评论(0编辑  收藏  举报