◆6.2指针的运算 2021/2/24
2021/2/24 -11- 6.2 指针的运算
62指针的运算 表61指针的运算 运算符。 算 赋值运算。 =>><<=3 关系运算。 十-4 算术运算。 逻辑非φ 间接引用运算。 newe 动态创建指针φ delete+ 册除动态创建的指针 取结构或对象的成员 2021/2/24 12
2021/2/24 -12- 6.2 指针的运算 表6.1 指针的运算
62.1指针的赋值运算 ◆指针的赋值运算一定是地址的赋值。用来对指针变量 赋值的可以是 同类型变量的地址; 同类型的已经初始化的指针变量; 其他同类型的指针。 ◆此外,也可以用0或者NUL对指针变量赋值。使得变 量包含的是“空指针”,即不指向任何的内存物理地 址 ◆必须注意:不同类型的指针是不可以互相赋值的。在 指针赋值时,不存在类型自动转换的机制。 2021/2/24
2021/2/24 -13- 6.2.1 指针的赋值运算 指针的赋值运算一定是地址的赋值。用来对指针变量 赋值的可以是: ◼ 同类型变量的地址; ◼ 同类型的已经初始化的指针变量; ◼ 其他同类型的指针。 此外,也可以用0或者NULL对指针变量赋值。使得变 量包含的是“空指针”,即不指向任何的内存物理地 址。 必须注意:不同类型的指针是不可以互相赋值的。在 指针赋值时,不存在类型自动转换的机制
◆例6.1观察以下指针赋值运算的结果。如果将注释去 掉,结果将如何? #include <iostream> value of pva1 is 0x00000000 using namespace std: 0x0012FF7C0×0012FF7C void maino 0x0012FF740x0012FF74 注释去掉会出现编译错误 tint val=100, pval; float vf1='A pvf1, *pvf2, nt *pva2=NULL; cout<<"value of pva2 is"<<pva2<<endl; pval=&val pⅵ1=pv2=&vf1 cout<< pval<<""<<&val<<endl; cout<<pvf1<< <<pvf2<<endl; //pvf1=pval 2021/224 -14
2021/2/24 -14- 例6.1 观察以下指针赋值运算的结果。如果将注释去 掉,结果将如何? #include <iostream> using namespace std; void main() {int va1=100,*pva1; float vf1='A',*pvf1,*pvf2; int *pva2=NULL; cout<<"value of pva2 is "<<pva2<<endl; pva1=&va1; pvf1=pvf2=&vf1; cout<<pva1<<" "<<&va1<<endl; cout<<pvf1<<" "<<pvf2<<endl; //pvf1=pva1; } value of pva1 is 0x00000000 0x0012FF7C 0x0012FF7C 0x0012FF74 0x0012FF74 注释去掉会出现编译错误
622间接引用运算 ◆间接引用运算符“*是一种一元算符,它和 指针变量连用,对指针所指向的内存地址单元 进行间接访问。使用的格式是: *指针变量 ◆如果指针变量ipt指向整型变量va,*iptr就是 变量va的内容 2021/2/24 -15
2021/2/24 -15- 6.2.2 间接引用运算 间接引用运算符“*”是一种一元算符,它和 指针变量连用,对指针所指向的内存地址单元 进行间接访问。使用的格式是: *指针变量 如果指针变量iptr指向整型变量va, *iptr就是 变量va的内容