第6章指针和引用 6.1指针 61.1指针的概念 台计算机中必定配置有大量的存储单元,每一个存储单元都 用一个唯一的“地址”所标识。指针变量(简称指针)就是用 来存放该“地址号码”的变量。 由于不同的数据类型其所占的存储单元个数相异,因此指针所 存放的是数据的首地址 2000 2002 36
第6章 指针和引用 6.1 指针 6.1.1 指针的概念 一台计算机中必定配置有大量的存储单元,每一个存储单元都 用一个唯一的“地址”所标识。指针变量(简称指针)就是用 来存放该“地址号码”的变量。 由于不同的数据类型其所占的存储单元个数相异,因此指针所 存放的是数据的首地址。 2000 2002 25 36
6.1.2指针的说明 storage type pointer, 其中: pointer为所说明的指针变量名;星号(*)在这里是 个指针变量说明符,它指出这里所说明的是一个指针变量 type为指针类型,也就是该指针变量将存放其地址之数据的 类型。例如 char pc pi =&i 这里的符号“&”叫做“取地址”运算符,它是 元运算符, 其运算结果为其操作数(必须是一个变量)的地址
6.1.2 指针的说明 <storage> type *pointer; 其中:pointer 为所说明的指针变量名;星号(*)在这里是一 个指针变量说明符,它指出这里所说明的是一个指针变量; type 为指针类型,也就是该指针变量将存放其地址之数据的 类型。例如: char *pc; int i, *pi = &i; 这里的符号“&”叫做“取地址”运算符,它是一个一元运算符, 其运算结果为其操作数(必须是一个变量)的地址
6.1.3对指针的访问 对指针的访问与对普通变量的访问不同。除了可以像普通变量 那样对指针进行读、写访问以及进行算术运算(统统属于对指 针值的访问)外,还存在一种对指针内容的访问,实际上就是 访问指针所指地址中数据的值。例如: int i, *ip, * iq p= & ∥为指针赋一地址 ∥/指针间的赋值 p=5: ∥对指针的内容进行写访问,等效于i=5 cout <<"ip, ∥/对指针的内容进行读访问
6.1.3 对指针的访问 对指针的访问与对普通变量的访问不同。除了可以像普通变量 那样对指针进行读、写访问以及进行算术运算(统统属于对指 针值的访问)外,还存在一种对指针内容的访问,实际上就是 访问指针所指地址中数据的值。例如: int i, *ip, *iq; ip = &i; // 为指针赋一地址 iq = ip; // 指针间的赋值 *ip = 5; // 对指针的内容进行写访问,等效于 i = 5; cout << *ip; // 对指针的内容进行读访问
6.14指针的运算 61.4.1指针的赋值运算 p,Q,1 float void pp ip =&i ∥将一个整型变量的地址赋给整型指针 1q=p; ∥将一个整型指针的值赋给整型指针 tp=(ot)i∥将一个整型指针的值赋给实型指针 vp ∥将一个整型指针的值赋给无值型指针 iq=0x80; ∥将一个常量赋给指针
6.1.4 指针的运算 6.1.4.1 指针的赋值运算 int *ip, *iq, i; float *fp; void *vp; ip = &i; // 将一个整型变量的地址赋给整型指针 iq = ip; // 将一个整型指针的值赋给整型指针 fp = (float*)ip; // 将一个整型指针的值赋给实型指针 vp = iq; // 将一个整型指针的值赋给无值型指针 iq = 0x80; // 将一个常量赋给指针
6.1.4.2指针的关系运算 ip>ig∥ip的值大于i时为真 在实用中,若某个指针的值为0,则称该指针为空指针。例: f(p==0) ∥若ip为空指针则 C+语言提供了一个预定义的宏 define NULL 0 所以,上述语句应当强调说明的是:向未初始化的指针所指 ifp=NULL)的内容进行写操作是一种危险的操作。所谓 未初始化的指针是指尚无明确值的指针
6.1.4.2 指针的关系运算 ip > iq // ip 的值大于 iq 时为真 在实用中,若某个指针的值为 0,则称该指针为空指针。例: if(ip == 0) … // 若 ip 为空指针则...。 C++ 语言提供了一个预定义的宏: #define NULL 0 所以,上述语句可以改为: if(ip == NULL) ... 应当强调说明的是:向未初始化的指针所指 的内容进行写操作是一种危险的操作。所谓 未初始化的指针是指尚无明确值的指针