您的位置:首页 > 其它

指向对象的指针变量

2016-04-07 11:00 204 查看

指向对象的常指针

将指向对象的指针变量声明为const型,并使之初始化,这样指针值始终保持为其初值,不能改变,即其指向始终不变。

Time t1(10,12,15), t2;
Time * const ptrl = &t1;
ptrl = &t2; //错误,ptrl不能改变指向

定义指向对象的常指针的一般形式为
类名 * const 指针变量名 = 对象地址;

注意在定义指针变量时使之初始化,如将第二行修改为:

Time * const ptrl;
ptrl = &t1; //使之指向t1,产生编译错误,常指针不能被赋值请注意:指向对象的常指针变量不能改变,即始终指向同一个对象,但可以改变其所指向对象(t1)的中数据成员的值。

指向常对象的指针变量

定义一个指向常变量的指针变量ptr;
const char *ptr;
定义指向常变量的指针变量的一般形式为
const 类型名 *指针变量名;

说明:
(1)如果一个变量被声明为常变量,只能用指向常变量的指针变量指向它,而不能用一般的指针变量去指向它。
如:
const char c[] = "boy";
const char *p1;
p1 = c;
char *p2 = c;//不合法,p2不是指向常变量的指针变量
(2)指向常变量的指针变量除了可以指向常变量外,还可以指向未被声明为const的变量,此时不能通过此指针变量改变该变量的值。如:
char c1 = 'a';
const char *p;
p = &c1;
*p = 'b';  //非法,不能通过p改变变量c1的值
c1 = 'b';
(3)如果函数的形参是指向非const型变量的指针,实参只能用指向非const变量的指针,而不能用指向const变量的指针,这样,在执行函数的过程中可以改变形参指针变量所指向的变量(也就是实参指针所指向的变量)的值。如:
const char str[] = "boy";
void fun(char *ptr);
fun(str);  //调用fun函数,实参是const变量的地址,非法


以上介绍的指向常变量的指针变量,指向常对象的指针变量的概念和使用是与此类似的,只要将“变量“换成”对象“即可。
(1)如果一个对象已被声明为常对象,只能用指向常对象的指针变量指向它,而不能用一般的(指向非const型对象的)指针变量去指向它。
(2)如果定义了一个指向常对象的指针变量,并使它指向一个非const的对象,则其指向的对象是不能通过指针来改变的。如:
Time t1(10, 12, 15);
const Time *p = &t1;
t1.hour = 18;
(*p).hour = 18;   //非法,不能通过指针变量改变t1的值
请注意指向常对象的指针变量和指向对象的常指针变量在形式和作用上的区别。
Time * const p;  //指向对象的常指针变量
const Time *p;   //指向常对象的指针变量
(3)指向常对象的指针变量最长用于函数的形参,目的在保护形参指针所指向的对象,使它在函数执行的过程中不能修改。如:

int main()
{
void fun(const Time *p);
Time t1(10, 13, 56);
fun(&t1);
return 0;
}
void fun(const Time *p)
{
p->hour = 18;   //错误
cout<<p->hour<<endl;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: