注:1.C++中可将0赋给一指针变量,意为初始化, 其值为“空”。即该指针变量不指向任一内存单元, 也就是不指向任一变量。如: #include <iostream.h> void main(void)i int *pt pt=0 pt=100;/出错,因p不指向任一内存单 元,因而不允许给p所指向的内存单元赋值 cout<<*pt<<n 2.不同类型的指针变量间可强制转换后赋值,但 通常没有意义。 2021/2/24 16
2021/2/24 16 注:1. C++中可将0赋给一指针变量,意为初始化, 其值为“空”。即该指针变量不指向任一内存单元, 也就是不指向任一变量。如: #include <iostream.h> void main(void){ int *pt; pt=0; *pt=100;//出错,因pt不指向任一内存单 //元,因而不允许给pt所指向的内存单元赋值。 cout<<*pt<<‘\n’; } 2. 不同类型的指针变量间可强制转换后赋值,但 通常没有意义
tA: #include <iostream.h> void main(void int i=100,*pl; float x=2.5,“p3; &i cout<<“pl=”<<pl<<Ⅶn’; p3=&x: c0ut<“*p3=”<*p3<<Ⅷm’;/输出时按实数取 pl=(int * )p3 cout<<“*pl=”<<pl<<n’;〃输出时按整数来取 执行后输出:*p1=100 p3=2.5 zpl=1075838976 ∥误 2021/224
2021/2/24 17 如:#include <iostream.h> void main(void){ int i=100, *p1; float x=2.5, *p3; p1=&i; cout<<“*p1=”<<*p1<<‘\n’; p3=&x; cout<<“*p3=”<<*p3<<‘\n’;//输出时按实数取 p1=(int *)p3; cout<<“*p1=”<<*p1<<‘\n’;//输出时按整数来取 } 执行后输出:*p1=100 *p3=2.5 *p1=1075838976 //错误
(2)指针的算术运算 pst=pst+1 struct student< int number; pst char name 4]; student pst; px+n,px-n—将指针从当前位 向前或向后移动n个数据单位,而不 pstn 是n个字节。 pxtn*sizeof(T 这取决于指针所指向的数据类型(T)。ppy pxpy求出的是两指针位置之间的(pxy)/ 数据个数,而不是地址差。 sizeof(T) 2021/224 18
2021/2/24 18 struct student{ int number; char name[4]; }; student *pst; (2)指针的算术运算 pst pst=pst+1; pxn: pxnsizeof(T) px-py: ( px-py) / sizeof(T) px+n, px-n ——将指针从当前位置 向前或向后移动n个数据单位,而不 是n个字节。 这取决于指针所指向的数据类型(T)。 px-py求出的是两指针位置之间的 数据个数,而不是地址差
例2:指针变量的“++”和“-”运算。 程序执行后输出: 82 pl=20 pl=6618552 2pl=10 pl=6618556 p2=100 p2=6618576 2p2=200 p2=6618580 2p2=100 p2=6618576 pcI=a pcl=6618568 pcl=b pcl=6618569 2021/224 19
2021/2/24 19 例2:指针变量的“++”和“--”运算。 程序执行后输出: 82 *p1=20 p1=6618552 *p1=10 p1=6618556 *p2=100 p2=6618576 *p2=200 p2=6618580 *p2=100 p2=6618576 *pc1=a pc1=6618568 *pc1=b pc1=6618569
注:C+中,同一个说明语句中所说明的变量均分配 在同一个连续的存储空间,VC++按从右到左的顺序 来分配。一般来说,分配的顺序随编译器不同而不 同 例3:指针变量加一常数。 83 执行后输出:*p2=100 p2=6618576 如p2=500 p2=6618592 2p2=300 p2=6618584 2021/224
2021/2/24 20 注:C++中,同一个说明语句中所说明的变量均分配 在同一个连续的存储空间,VC++按从右到左的顺序 来分配。一般来说,分配的顺序随编译器不同而不 同。 例3:指针变量加一常数。 83 执行后输出:*p2=100 p2=6618576 *p2=500 p2=6618592 *p2=300 p2=6618584