C++语言程序设计 第六章指针 个指针变量p在程序中通常有如下表示形式: p—指针变量,它的内容是地址量; p一指针所指向的变量,是指针所指向的内存空间中的数据; &p-指针变量所占存储空间的地址。 #include <iostream. h> cout<<a=<<a<<endI: void maino cout<<p="<<p<<endl; cout<<&a='<<&a<<endl int a=10: cout<<"*p”<<p<endl; Int *p; cout<<"&p=<<&p<<endl; p=&a; cout<< a=w<<as<endl 运行结果为 cout<<"p"<<p<<endl; a=10 P=0x0065 FDF4 cout<<*p<<"p<<endl &a=0x0065FDF4 cout<<"&p="<<&p<<endl; p=10 cout<<endl; *p=15; &p=0x0065FDF0 a=15 P0x0065FDF4
C++语言程序设计 第六章 指针 一个指针变量p在程序中通常有如下表示形式: p — 指针变量,它的内容是地址量; *p一 指针所指向的变量,是指针所指向的内存空间中的数据; &p一 指针变量所占存储空间的地址。 #include <iostream.h> void main() { int a=10; int *p; p=&a; cout<<"a="<<a<<endl; cout<<"p="<<p<<endl; cout<<"&a="<<&a<<endl; cout<<"*p="<<*p<<endl; cout<<"&p="<<&p<<endl; cout<<endl; *p=15; cout<<"a="<<a<<endl; cout<<"p="<<p<<endl; cout<<"&a="<<&a<<endl; cout<<"*p="<<*p<<endl; cout<<"&p="<<&p<<endl; } 运行结果为: a=10 p=0x0065FDF4 &a=0x0065FDF4 *p=10 &p=0x0065FDF0 a=15 p=0x0065FDF4
C++语言程序设计 第六章指针 614指针的初始化与赋值 指针初始化的一般形式为: 存储类型数据类型*指针变量名=初始地址量; 例如: Int a int *p=&a 上述语句在定义p指针的同时,把整型变量a的地址作为初值 赋给了整型指针p,从而使p指向了变量a的存储空间。“*” 号仅是一个标记,说明p是一个指针变量,在定义的同时将a 的地址赋予了指针变量p。还可以写成以下语句形式: inta,’p=&a;
C++语言程序设计 第六章 指针 6.1.4指针的初始化与赋值 指针初始化的一般形式为: 存储类型 数据类型 * 指针变量名=初始地址量; 例如: int a; int *p=&a; 上述语句在定义p指针的同时,把整型变量a的地址作为初值 赋给了整型指针p,从而使p指向了变量a的存储空间。 “*” 号仅是一个标记,说明p是一个指针变量,在定义的同时将a 的地址赋予了指针变量p。还可以写成以下语句形式: int a,*p=&a;
C++语言程序设计 第六章指针 为明确表示指针变量不指向任何变量,在C++语言中用0值给指针变量赋值表示 这种情况,记为NULL。例如 int*p=NUL;或int*p=0; 指针值为0的指针变量为空指针。对于静态的指针变量,如在定义时未给它指定 初值,系统自动给它指定初值为0。空指针并不是指针存储空间为空的意思,这 里的0也不是数值的0,而是NULL字符的ASC码值。空指针不表示任何指向, 而是表示指针的一种状态,它在程序中经常作为一种状态标志使用。 另外,指针变量对所指对象也有类型限制,不能将一个其他对象的地址赋给指针 变量。如有以下定义: int i= 100, j, *ip, *intp; float f, *fp; &i 以下都是不正确的赋值 ip=100;∥指针变量不能赋整数值 intp=j;∥指针变量不能赋整型变量的值 fp= & ∥能指向 float型变量的指针变量,不能指向int型变量 fp=ip;∥两种指向不同类型变量的指针变量不能相互赋值
C++语言程序设计 第六章 指针 为明确表示指针变量不指向任何变量,在C++语言中用0值给指针变量赋值表示 这种情况,记为NULL。例如 int *p = NULL; 或int * p = 0; 指针值为0的指针变量为空指针。对于静态的指针变量,如在定义时未给它指定 初值,系统自动给它指定初值为0。空指针并不是指针存储空间为空的意思,这 里的0也不是数值的0,而是NULL字符的ASCII码值。空指针不表示任何指向, 而是表示指针的一种状态,它在程序中经常作为一种状态标志使用。 另外,指针变量对所指对象也有类型限制,不能将一个其他对象的地址赋给指针 变量。如有以下定义: int i = 100, j, *ip, *intpt; float f, *fp; ip = &i; 以下都是不正确的赋值: ip = 100; // 指针变量不能赋整数值 intpt = j; // 指针变量不能赋整型变量的值 fp = &i; // 能指向float型变量的指针变量,不能指向int型变量 fp = ip; // 两种指向不同类型变量的指针变量不能相互赋值
C++语言程序设计 第六章指针 615指针的运算 1指针的算术运算 指针的算术运算只有两种:加和减。设p和q是指向具有相同类型的一组数据的指针,数据的 排列是由前向后的,n是整数,则指针可以进行的算术运算有如下几种 p+n p-n p++++p p---p p-q (1)指针与整数的加减运算 (2)指针加1、减1运算 (3)指针的相减 2.指针的关系运算 两个指针进行关系运算时,它们必须指向同一数据类型,指针的关系运算表示它们所指 向的变量在内存中的位置关系。由于数据在内存中的存储顺序是由前向后,若指针p和q 指向同一类型的数据,则指针的关系运算如表62所示。 应注意,在指向不同数据类型的指针之间进行关系运算是没有意义的,指针与一般整数 常量或变量之间进行关系运算也是没有意义的。但指针与整数0之间可进行等或不等的关 系运算,即 p==0; 或 p!=0 用于判断指针是否为空指针
C++语言程序设计 第六章 指针 6.1.5指针的运算 1.指针的算术运算 指针的算术运算只有两种:加和减。设p和q是指向具有相同类型的一组数据的指针,数据的 排列是由前向后的,n是整数,则指针可以进行的算术运算有如下几种: p+n p-n p++ ++p p-- --p p-q (1)指针与整数的加减运算 (2)指针加1、减1运算 (3) 指针的相减 2.指针的关系运算 两个指针进行关系运算时,它们必须指向同一数据类型,指针的关系运算表示它们所指 向的变量在内存中的位置关系。由于数据在内存中的存储顺序是由前向后,若指针p和q 指向同一类型的数据,则指针的关系运算如表6.2所示。 应注意,在指向不同数据类型的指针之间进行关系运算是没有意义的,指针与一般整数 常量或变量之间进行关系运算也是没有意义的。但指针与整数0之间可进行等或不等的关 系运算,即 p==0; 或 p!=0 用于判断指针是否为空指针