指针的使用

来源:互联网 发布:php项目管理系统kis 编辑:程序博客网 时间:2024/06/07 05:24

指针是CC++中的一个重要的概念,每一个学习和使用CC++的人,都应深入的学习和掌握指针。

在了解指针的内容前应该了解数据在内存中的存储方式和读取方式。在程序中定义一个变量,在编译时就给这个变量分配内存单元。而在读取数据时有两种读取方式,一是直接存取(直接访问方式,这是指按变量地址存取变量值;而是间接存取(间接访问)方式,这是指将变量的地址存放在另一个变量中。我们可以定义这样一种特殊的变量专门用来存放地址。

一、定义和引用指针变量

1、几个有关概念:变量的指针就是变量的地址。

  用来存放变量地址的变量就是指针变量。

  指针变量指向的变量的类型就是该指针变量的基类型。

2、两个与指针变量有关的运算符:&:取地址运算符

*:指针运算符(间接访问运算符)

3、定义指针变量的一般形式为:

 基类型*指针变量名

  定义之后若要改变这个指针变量的指向,将被指向的变量地址赋给指针变量即可,运用&

eg

指针的运用 - 庞倩倩 - 庞倩倩

  在定义指针变量时应注意:在定义指针变量时必须指明基类型。

                        不能用一个整数给一个指针变量赋值。

egint *point=1(错误,因为指针变量是用来存放地址的变量)

                        一个指针变量只能指向同一个类型的变量。

                        在说明变量类型时一般不能说“point是一个指针变量”,而 应该说“point是指向整型数据的指针变量”。

4、定义其他类型的指针变量

(1)const指针

指向常量的指针变量

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

定义这种指针变量的一般形式为:

        const 类型名*指针变量名

eg:

指针的运用 - 庞倩倩 - 庞倩倩

  常指针变量(常指针)

用常指针限制了指针变量的指向,但是可以通过指针变量改变它指向的对象的值。

定义常指针变量的一般类型为:

        类型名 const*指针变量名

eg

指针的运用 - 庞倩倩 - 庞倩倩

  指向常量的常指针

指向常量的常指针指向一个固定的对象,且该对象的值不能改变(即指向常量的指针和常指针的功能的累加)

定义指向常量的常指针的一般类型为:

      const 类型名 const*指针变量名

 

(2)void指针类型

基类型为void的指针变量不指向任何类型的数据。在这里应注意:不要把“指向void类型”理解为能指向任何类型的数据,而应理解为“指向空类型”或者“不指向确定的类型”的数据。void类型的指针是过渡型的,在使用时必须转换为指定一个确定的数据类型的数据,才能访问实际存在的数据,否则它没有任何作用。

eg:

指针的运用 - 庞倩倩 - 庞倩倩

  二、用指针函数参数

用指针数组做函数的作用是将一个变量的地址传给被调用函数的形参。这里应注意,指针变量和指针变量所指的变量的存储空间是不一样的。

1.交换ab的值,而p1p2的值不变。先看一个简单的例子

指针的运用 - 庞倩倩 - 庞倩倩

  在这个例子中,将a的地址传给point_1,将b的地址传给point_2,compare函数中相当于调换ab的地址,point_1point_2不变。看一下下面这个例子来区别一下

指针的运用 - 庞倩倩 - 庞倩倩

 这里对比例子中,只是调换point_1point_2ab不变,其程序运行如下

指针的运用 - 庞倩倩 - 庞倩倩

 在这里,注意不要写成下面这种形式

指针的运用 - 庞倩倩 - 庞倩倩

  这这个反例中,temp是一个指针变量,所以*temp应该是指针变量temp所指向的变量,但是在这个例子中,temp并未被赋值,它指向的单元是不可预见的,这样是很危险的。

 

三、数组与指针

1、指向数组元素的指针

一个变量有地址,一个数组中有若干个元素,每个元素都有相应的地址,所以指向数组元素的指针就是指数组元素的地址。例如:

指针的运用 - 庞倩倩 - 庞倩倩

  

这里应知道的是,在C或者C++中数组名代表数组中第一个元素的地址,所以上述第三个语句也可以写成

指针的运用 - 庞倩倩 - 庞倩倩

  

如果指针变量p指向数组中的某一个元素,则p+1则指向该数组中的下一个元素。下面是用指针变量指向数组元素的一个简单例子

指针的运用 - 庞倩倩 - 庞倩倩

 更复杂的用指针变量做函数形参也是相似的用法,你们可以回去后写几个实例来熟练一下。

 

四、字符串与指针

在程序中如果定义一个字符指针并把它初始化,实则是将字符串中的第一个字符的地址赋予字符指针。在输出时,系统会先输出字符指针所指向的第一个字符,字符指针再逐次加1,知道预见\0为止。例如:

指针的运用 - 庞倩倩 - 庞倩倩

  

 

五、函数与指针

1、用函数指针调用函数

一个函数在编译时会被分配一个入口地址,而当函数指针指向一个函数时,这个函数入口地址就称为函数的指针。指向函数的指针变量的一般定义形式为:

函数类型(*变量名)(函数形参表);

例如 int*p)(intint);

下面举一个简单的例子,比较输出ab的最大值:

指针的运用 - 庞倩倩 - 庞倩倩

  2、返回指针值的函数、

一个函数可以返回整型值,字符值,实型值等,也可以返回指针型的数据,即地址。返回指针值得函数简称为指针函数,其定义形式一般如下:

类型名*函数名(参数列表);

例如: int *p(int a,int b);


六、指针数组和指向指针的指针

1、如果一个数组,其元素均为指针类型数据,该数组称为指针元素。一维指针数组的定义形式为:

 类型名*数组名[数组元素];

例如: int *p[10];

2、指向指针的指针

例如 int **p;

这两个我就比不举例子了,你们可以自己尝试一下。

0 0