(3)指针的关系运算 指对两个相同类型的指针的运算,如px<py,当 px所指位置在py之前时,表达式的值为1,否则为0。 px==0,px!=0用来判断px是否为空指针。 注:不同类型的指针以及指针和一般整数间的关系 运算是无意义的。 例4:指针变量的关系运算。 执行后输出:100200300406 84 6500 元素之和为:1500 2021/224
2021/2/24 21 (3)指针的关系运算 指对两个相同类型的指针的运算,如px<py,当 px所指位置在py之前时,表达式的值为1,否则为0。 px= =0,px!=0用来判断px是否为空指针。 注:不同类型的指针以及指针和一般整数间的关系 运算是无意义的。 例4:指针变量的关系运算。 84 执行后输出:100 200 300 400 500 元素之和为:1500
注:几种运算符的混合运算及其优先级 (1)指针运算符“”与取地址运算符“&”优先级相 同,按从右到左的顺序运算。如设: inta|5]={100,200,300,400,500}, 2pl=&a0],b; 则“&*p1”的运算顺序是先进行“*”运算,再进 行“&”运算。而“*&a|0”则相反。 (2)“++”、“-”、指针运算符“☆”和取地址运算符 “&”的优先级相同,按从右到左结合。如: a)pl=&a[];b=*pl++; 结果是b的值为100,p1指向数组a的第1个元素 (从第0个元素起) 2021/224
2021/2/24 22 注:几种运算符的混合运算及其优先级。 (1)指针运算符“*”与取地址运算符“&”优先级相 同,按从右到左的顺序运算。如设: int a[5]={100,200,300,400,500}, *p1=&a[0],b; 则“&*p1”的运算顺序是先进行“*”运算,再进 行“&”运算。而“* &a[0]”则相反。 (2)“++”、“--”、指针运算符“*”和取地址运算符 “&”的优先级相同,按从右到左结合。如: a)p1=&a[0];b=*p1++; 结果是b的值为100,p1指向数组a的第1个元素 (从第0个元素起)
b)pl=&a[0,b=*+p1 结果是b的值为200,p1指向数组a的第1个元素 c)pl=&ca|0],b=(*p1)+ 结果是b的值为100,p指向数组a的第0个元素, 并将a0的值改为101。 d)*(p1++) 等同于*p1++ )pl=&a[1l,b=++p 结果是b的值为201,a{1的值修改为201,p1仍 指向数组a的第1个元素。 *十十pxy=*(++px) y=*x++y=*(pX十+)注意优先级和结合顺序 问题:y=*x++和y=(*px)+的意义 2021/2/24
2021/2/24 23 b) p1=&a[0],b=*++p1 结果是b的值为200,p1指向数组a的第1个元素 c)p1= &a[0],b=(*p1)++ 结果是b 的值为100, p1指向数组a的第0个元素, 并将a[0]的值改为101。 d)*(p1++) 等同于*p1++ e)p1=&a[1],b=++*p1 结果是b的值为201,a[1]的值修改为201,p1仍 指向数组a的第1个元素。 ◼ y= ++ px——y= ( ++ px) ◼ y= px++——y= ( px++ ) 注意优先级和结合顺序 ◼问题:y= px++和y= (px)++的意义
指针和数组 指针与数组的关系 数组的指针—数组在内存中的起始地址。 数组元素的指针—数组元素在内存中的起始地址。 指向数组的指针变量的定义: 指向数组的指针变量的定义,与指向普通变量的 指针变量的定义方法一样。 如: int array10,* pointer=aray(或& arrays) 或者: int array10,* pointer; pointer=array; 注意:数组名代表数组在内存中的起始地址(与 第0个元素的地址相同),所以可以用数组名给指针 变量赋值。 2021/224 24
2021/2/24 24 数组的指针──数组在内存中的起始地址。 数组元素的指针──数组元素在内存中的起始地址。 指向数组的指针变量的定义: 指向数组的指针变量的定义,与指向普通变量的 指针变量的定义方法一样。 如:int array[10], *pointer=array(或&array[0]); 或者: int array[10], *pointer; pointer=array; 注意:数组名代表数组在内存中的起始地址(与 第0个元素的地址相同),所以可以用数组名给指针 变量赋值。 指针和数组 指针与数组的关系
数组元素的引用,既可用下标法,也可用指针法。 使用下标法,直观;而使用指针法,能使目标程序 占用内存少、运行速度快 可以用指针代替数组下标来访问数组,如: #include <iostream. h> void main(void ) i 指针与数组的差异: nta4]={11,22,33,44}; 指针是地址变量, for (int i=0; i<4; i++ 可任意改变它的值 cout<"(a+"i<"="数组名是地址常量, a+i)<",a"<i其值不能改变。 "≤ai; 结果:*(a+0)=1,a0=11,*(a+1)=22,a1l=22, (a+2)=33,a[2]=33,“(a+3)=44,a|3]=44 2021/224 25
2021/2/24 25 可以用指针代替数组下标来访问数组,如: #include <iostream.h> void main(void ){ int a[4] = {11,22,33,44}; for (int i=0; i<4; i++) cout << " *(a+ " << i << ")= " << *(a+i)<< " , a[" << i << "]= " << a[i] ; } 指针与数组的差异: 指针是地址变量, 可任意改变它的值; 数组名是地址常量, 其值不能改变。 结果: *(a+0)=11, a[0]=11, *(a+1)=22, a[1]=22, *(a+2)=33, a[2]=33, *(a+3)=44, a[3]=44 数组元素的引用,既可用下标法,也可用指针法。 使用下标法,直观;而使用指针法,能使目标程序 占用内存少、运行速度快