指针运算一地址运算 单个指针的运算 加减运算:每加(减)1表示指针指向后(前) 个数据单元 例: p:p=p+n, 两个指针的运算 比较:用来比较两个指针的前后位置 例:(P1>p2) 相减:两个指针相距多远? 主要用于对数组的处理
11 指针运算-地址运算 ▪ 单个指针的运算 ▪ 加减运算:每加(减)1表示指针指向后(前)一 个数据单元 ▪ 例:p++;--p;p=p+n; ▪ 两个指针的运算 ▪ 比较:用来比较两个指针的前后位置 ▪ 例: (p1>p2) ▪ 相减:两个指针相距多远? 主要用于对数组的处理
小结1 指针的基础知识 寻址方式 指针的概念、定义、赋值、间接引用、运 12
12 小结1 ▪ 指针的基础知识 ▪ 寻址方式 ▪ 指针的概念、定义、赋值、间接引用、运 算
习题7.1 下面的函数用于计算两个整数之和,并 通过指针形参z得到x和y相加后的结果。 void Add(int x, int y, int *z) ★z X+y. 13
13 习题7.1 ▪ 下面的函数用于计算两个整数之和,并 通过指针形参z得到x和y相加后的结果。 void Add(int x,int y, z) { = x+y; } int * *z
习题72 函数功能为 void Exchange (int * pl, int*p2) int P: P★ =p1: p1=^p2 2 A)交换p1和*p2的值 B)正确,但无法改变*p1和p2的值 nC)交换*P1和*P2的地址 D)可能造成系统故障 14
14 习题7.2 ▪ 函数功能为________ void Exchange(int *p1, int *p2) { int p; p = *p1; *p1 = *p2; *p2 = p; } ▪ A)交换 *p1 和 *p2的值 ▪ B)正确,但无法改变 *p1 和 *p2的值 ▪ C)交换 *p1 和 *p2的地址 ▪ D)可能造成系统故障
两个重要内容: °指针指向了哪个数组元素? #include<s ●是指针运算还是数组元素运算 void main o int a囗={2,4,6,8,10} int y=o, i, *p; a[0] 60006001 p=&a[o] p+1 6003 a[1] for(i=0; i<5; i++) +2004 a[2] (p+i) 6005 printf( yd\n".y) p+3-9 a[3] +4 6009 a[4] 15
15 读程序-1 #include<stdio.h> void main ( ) { int a[]={2,4,6,8,10}; int y=0,i,*p; p=&a[0]; for(i=0;i<5;i++) y + = * (p+i); printf("%d\n",y); } •两个重要内容: •指针指向了哪个数组元素? •是指针运算还是数组元素运算 6000 6001 6002 6003 6004 6005 6006 6007 6008 6009 a a[0] a[1] a[2] a[3] a[4] 2 4 6 8 10 p 6000 p+1 p+2 p+3 p+4