指向对象的指针变量

指向对象的常指针

将指向对象的指针变量声明为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;
}















  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值