您的位置: 首页 > 软件教程 > C++教程专题 > C++中的指针用法汇集

C++中的指针用法汇集

8.7分
出处:网络 时间:2012-04-05

您可能感兴趣的话题: C++  

核心提示:C++程序设计重要基础就是类和对象,对象指针是很重要的一部分,包括指向对象的指针、指向对象成员的指针、this指针、指向对象的常指针、指向常对象的指针等。

  4、指向对象的常指针

  将指向对象的指针变量声明为const型且进行处始化,这样指针值始终保持为其初值,不能改变其指向。

  如:

  Time t1(8,8,8),t2;

  Time *const p=&t1; //常指针p指向对象t1

  p=&t2; //试图改变p的指向,非法

  由上面我们可以看出定义指向对象的常指针的一般形式为:

  类名 *const 指针变量名=对象的起始地址;

  注意:指向对象的常指针变量的值不能改变,但可以改变它所指向对象中的数据成员的值。

  常指针一般用作函数的参数,这样就不允许在函数执行过程中改变指针变量的值,使其始终保持指向原来的对象。

  5、指向常对象的指针变量

  首先回顾一下指向常变量的指针变量,其一般形式为:

  const 类型名 *指针变量名;

  如:

  const char *p;

  如果一个变量已经被声明为常变量,那么只能用指向常变量的指针变量去指向它,而不能用一般的指针变量。另外,指向常变量的指针变量除了可以指向常变量外,还可以指向未被声明为const的变量,但也不能通过该指针改变其值。例如:

  char c='a' //定义字符变量c,未声名为const

  const char *p; //定义指向常变量的指针变量p

  p=&c; //p指向字符变量c

  *p='b'; //非法

  c='b'; //合法

  说明:上例中,指针变量p指向字符变量c,并不说把c也声明成常变量,而只是说在通过指针变量引用c时,c具有常变量的特征,其值是不能改变的,但c仍然是一个普通变量。

  在指向常变量的指针中,关于函数形参的指针类型有几点值得注意:

  如果函数形参是非const型指针变量,实参只能用指向非const型指针;如果函数形参是指向const型变量的指针,实参则可以是const型的或非const型的指针变量。换句话说就是指向常变量的指针可以指向const和非const型的变量,而指向非const型变量的指针只能指向非const的变量。

  用指针变量作形参时形参和实参的对应关系表

形参 实参 合法与否 改变指针所指对象的值
指向非const型变量的指针 非const变量的地址 合法
指向非const型变量的指针 const变量的地址 非法 /
指向const型变量的指针 const变量的地址 合法 不行
指向const型变量的指针 非const变量的地址 合法 不行

  下面说到正题,指向常对象的指针变量和指向常变量指针变量类似。

  如果一个对象已经被声明为长对象,只能用指向常对象的指针变量指向它,而不能用一般的指针变量指向它。

  如果定义了一个指向常对象的指针变量且使它指向一个非const的对象,其指向的对象不能通过指针来改变。

  如果定义了一个指向常对象的指针变量,是不能通过它改变所指向的对象的值的,但是指针变量本身的值是可以改变的。

  如:

  Time t1(8,8,8),t2; //定义对象

  const time *p=&t1; //定义指向常对象的指针p,并使它指向t1

  p=&t2; //合法,指针p指向对象t2

  所以当我们希望在调用函数时对象的值不被修改,我们就可以把形参定义为const型的指针变量,同时用对象的地址作实参(对象可以是const或非const型);当要求对象不仅在调用函数中不被改变,而且在程序执行过程中也不发生改变,我们就把它定义为const型。所以指向常对象的指针最常用于函数的参数,以保护形参指针所指向的对象在函数执行过程中不被修改。

  以上是我学习C++指针时的记录,也是对C++指针用法的总结,我想对大家学习C++应该是很有帮助的。

  

网友评论
多特网友 2013-06-10 09:15:23 回复
C++ 是唯一门面对过程的语音 怎么 编变成面对对像了???真心欺负外行人啊
多特网友 2013-10-31 16:19:29
哥哥,你这样会让人贻笑大方的
多特网友 2012-03-12 13:43:02 回复
原来指针的知识这么神奇啊,有点意思!
多特网友 2013-06-10 09:15:23 回复
C++ 是唯一门面对过程的语音 怎么 编变成面对对像了???真心欺负外行人啊
多特网友 2013-10-31 16:19:29
哥哥,你这样会让人贻笑大方的
多特网友 2012-03-12 13:43:02 回复
原来指针的知识这么神奇啊,有点意思!
多特网友 2012-02-24 13:09:26 回复
break与contine的区别
多特网友 2012-02-24 13:09:26 回复
break与contine的区别
精品软件课程
更多 >
Java,是由Sun Microsystem... [详细]
C语言是一种面向过程的计算机程序设计语言。多... [详细]
Visual Basic是一种由微软公司开发... [详细]
Oracle Database,又名Orac... [详细]
Visual Basic.NET是从 Vis... [详细]
Visual C++微软公司的C++开发工具... [详细]