2017-5-22 1第5章指针的应用§ 、指针概述一、内存地址的概念地址编码的基本单位是字节,每个字节是一个基本内存单元。二、从内存单元中存取数据的方法 1、通过变量名,称为直接访问方式,直接对变量的存储单元进行存取访问。在变量获得内存空间的同时,变量名也就成为了相应内存空间的名称,在变量的整个生存期内都可以用这个名字访问该内存空间,表现在程序语句中就是通过变量名存取变量内容。 2017-5-22 2 2、通过地址,称为间接访问方式,先找到存放变量的地址的变量,得到变量的地址,再根据变量的地址找到变量的存储单元,对它进行存取访问。 C++ 拥有在运行时获得变量的地址和操纵地址的能力。变量的地址可以使用地址运算符&求得, 在某一变量前加上地址运算符&,则为该变量的地址,如: &x表示变量 x的地址数组名表示数组的首地址;函数的地址用函数名表示。用来存放地址的变量就叫做指针型变量,简称指针。 2017-5-22 3 假设 ptr 为一指针,则语句: ptr =&x; 就将变量 x的地址存入了指针 ptr 中。也经常简称为“指针 ptr 指向变量 x”。可以通过指针得到变量 x的值或改变变量 x的值: *ptr =2; //相当于 x=2 y=*ptr ;//将x的值赋给 y 2017-5-22 4 、阅读如下程序: 源程序清单: #include< iostream >using namespace std; void main( ) {int a; int *p; a=10; p=&a; cout <<"a 的值表示方法 1:"<<a<< endl ; cout <<"a 的值表示方法 2:"<< *p<< endl ; cout <<"a 的地址表示方法 1:"<<&a<< endl ; cout <<"a 的地址表示方法 2:"<<p<< endl ; } 2017-5-22 5 § 、指针变量的定义、赋值及使用一、指针变量的定义指针本身也是一种变量,须先声明后使用。声明指针类型的变量是在声明变量的同时加上*来完成的。对应于各种类型的数据都有相应的指针类型。*放在指针定义中时,被称为指针定义符。放在可执行语句中的指针前被称为指针运算符,也称为“间接访问”运算符。 2017-5-22 6 指针变量的声明语句,由数据类型后跟星号, 再跟随指针变量名组成。数据类型*指针变量名; 如:int *iptr ;int *iptr ; int *iptr ;int *iptr ; 在指针定义中,一个*只能表示一个指针。 int * iptr1,iptr2; //iptr1 —指针变量, iptr2 整型变量 int * iptr1, * iptr2; //两个指针变量 2017-5-22 7 地址和指针的关系 int x,*ptr ; x=3 ;ptr =&x ; 如果 ptr 指向 x,那么*ptr 的值为 x的值,以后对*ptr 的赋值等价于对 x的赋值。#include < iostream >using namespace std; void main( ) {int x=3, *ptr ; ptr =&x ; *ptr =11; cout <<x<< endl ;//x=11 } 2017-5-22 8 二、指针变量的赋值与变量定义一样,定义好指针变量后也可以对它进行初始化,指针变量可以初始化为 0、 NULL 或一个地址。数值为 0或者 NULL 的指针不指任何内容。数值 0是可以直接赋给指针变量的唯一整数值。 ,一般格式如下: 数据类型*指针名=初始地址; 2017-5-22 9 ,用赋值语句将其初始化。指针变量名=地址; 可以是变量的地址、数组名、函数名等。用变量地址作为初值时,该变量的定义必须在指针初始化之前定义。不能把常量或表达式的地址赋给指针变量。不能将一个非 0整数直接赋给指针变量,但可以赋整数值 0,表示该指针为空指针。例如: int *p; p=0; p 为空指针,不指向任何地址。 2017-5-22 10 void 类型的指针,该指针可以被赋予任何类型对象的地址。例如: void *general; int *point; int i; general=&i; point=( int *) general;
c课件第五章 来自淘豆网m.daumloan.com转载请标明出处.