您的位置:首页 > 编程语言 > C语言/C++

C++知识要点整理02:指针

2013-03-25 11:07 267 查看

1.用指针作函数参数

函数的参数不仅可以是整型,浮点型,字符型等数据,还可以是指针类型。它的作用是将一个变量的地址传送给被调用函数的形参。

2.用指针变量作函数形参接收数组地址

数组名代表数组首元素的地址。用数组名作函数的参数,传递的是数组首元素的地址。

3.C++编译系统将形参数组名一律作为指针变量来处理。

例如:void select_sort(int array[],int n)  等价于  void select_sort(int *array,int n)

4.指针数组和指向指针的指针

(1)如果一个数组,其元素均为指针类型数据,该数组称为指针数组,也就是说,指针数组中的每一个元素相当于一个指针变量,      它的值都是地址。

     例如:int *p[4]

(2)指向指针数据的指针,简称指向指针的指针。一个指针数组name,它的每一个元素是一个指针型数据(其值为地址),分别指向不同的字符串。数组名name代表该指针数组首元素的地址。name+i是name[i]的地址。由于name[i]的值是地址(即指针),因此name+i就是指针型数据的指针。还可以设置一个指针变量p,它指向指针数组的元素,p就是指向指针型数据的指针变量。

     例如 :char **p;

         char *name[]={"BASIC","FORTRAN","C++","Pascal","COBOL"};

         p=name+2;

         cout<<*p<<endl;

         cout<<**p<<endl;

      运行结果为:

          C++

          C

    分析:由于*p代表name[2],它指向字符串"C++",或者说在name[2]中存放了字符串"C++"第一个字符的地址,因      此"cout<<*p"就从第一个字符开始输出字符串"C++"。第二个cout中的**p是*p(值为name[2])指向的"C++"第一个字符元素的内容,即字符"C"。因此"cout<<**p"输出字符"C"。

5.const指针

(1)指向常量的指针变量

   const 类型名* 指针变量名

 
用指向常量的指针变量只是限制了通过指针变量改变它指向的对象的值

 
如果一个变量已被声明为常变量,只能用指向常量的指针变量指向它。


  如果函数的形参是指向普通(非const)变量的指针变量,实参只能是用指向普通(非const)变量的指针,而不能用指向const     变量的指针。这样在执行函数时可以改变形参指针变量所指向的变量(也就是实参指针所指向的变量)的值。
(2)常指针

   类型名 * const 指针变量名
   常指针指针值不能改变;必须在定义时初始化,指向其指向;指针变量的指向变量的值可以改变;注意const在"*"之后。

(3)指向常量的常指针

     将(1)和(2)的作用叠加在一起,就是指向常量的常指针变量。即指针变量指向一个固定的对象,该对象的值不能改变(指不     能通过指针变量改变该对象的值)。

    const 基本类型名 * const 指针变量名;

(2)常指针

   类型名 * const 指针变量名
   常指针指针值不能改变;必须在定义时初始化,指向其指向;指针变量的指向变量的值可以改变;注意const在"*"之后。

(3)指向常量的常指针

     将(1)和(2)的作用叠加在一起,就是指向常量的常指针变量。即指针变量指向一个固定的对象,该对象的值不能改变(指不     能通过指针变量改变该对象的值)。

    const 基本类型名 * const 指针变量名;

6.void指针类型

   可以定义一个基类型为void的指针变量(即(void *)型变量),它不指向任何类型的数据。请注意:不要把“指向void类型”理解为能指向“任何的类型”的数据,而应理解为“指向空类型”或“不指向确定的类型”的数据。

   前面已说明,如果指针变量不指定一个确定的数据类型,它是无法访问任何一个具体的数据的,它只提供一个地址。在C中用malloc函数开辟动态存储空间,函数的返回值是该空间的起始地址,由于该空间尚未使用,其中没有数据,谈不上指向什么类型的数据,故返回一个void*型的指针,表示它不指向确定的具有类型的数据。显然这种指针是过渡型的,它必须转换为指定一个确定的数据类型的数据,才能访问实际存在的数据,否则它是没有任何用处的。在实际使用中要对它进行类型转换。
     
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C++ 知识点