中国高校课件下载中心 》 教学资源 》 大学文库

《计算机程序设计基础》课程PPT教学课件(C语言)第4章 数组和指针 4-16 指针变量的运算——算术运算

文档信息
资源类别:文库
文档格式:PPTX
文档页数:11
文件大小:1.15MB
团购合买:点击进入团购
内容简介
《计算机程序设计基础》课程PPT教学课件(C语言)第4章 数组和指针 4-16 指针变量的运算——算术运算
刷新页面文档预览

武汉理工大学计其机学院信息技术票计算机程序设计基础C语言主讲教师:李民武汉理工大学Wuhan Universityof Technology

主讲教师:李 民

计算机程序设计基础C语言0指针和数组指针变量的运算0094专蛋的武汉理工大学WuhanUniversityof Technology

计算机程序设计基础C语言 ⚫ 指针和数组 ➢ 指针变量的运算

指针变量的运算Qa[]指针的算术运算int a[1o],*p=a;p+1,a+1a[1]ptip士ixd介.......p+i,a+i(i为整型数,d为p指向的变量所占字节数a[i]p+i, p-i如下运算可以吗?P不移动p+9,a+9a[9]att,a--xp++, p--P移动Vati,a-ip+=i,p-=iXa-=ia+=irint a[i0];int *p=&a[2];p++;问:哪个元素值为1?*p=1 ;答:a[3]

◼ p  i  p  i  d ( i为整型数, d 为 p指向的变量所占字节数 ) ◼ p+i, p - i ◼ p++, p - - ◼ p+= i, p - = i 指针 变量的运算 ◼ 指针的算术运算 int a[10],*p=a; 如下运算可以吗? a++, a- a+i, a - i a+=i, a - = i X √ X a[0] a[1] . a[9] p p+1,a+1 p+i,a+i p+9,a+9 . a[ i ] P不移动 P移动 int a[10]; int *p=&a[2]; p++; *p=1; 问:哪个元素值为 1 ? 答:a[3]

指针变量的运算a[o]指针的算术运算p2a[1]inta[10],*p1=&a[5],*p2=&a[1];p1a[5]若p1与p2指向同一数组,则,p1-p2两指针间元素个数台(p1-p2) /da[9]答:问:p1-p2的值=?4无意义p1+p2

◼ 若p1 与p2指向同一数组 ,则,p1 -p2 = 两指针间元素个数  (p1 -p2)/d ◼ p1+p2 无意义 指针 变量的运算 int a[10], *p1=&a[5],*p2=&a[1]; ◼ 指针 的算术运算 a[0] a[1] . a[9] p2 p1 . a[5] 问 :p1 -p2的值 = ? 答: 4

用p++与地址偏移量遍历整个数组#includeint main ()(注意:也造成了指针p的移动。inta[10]=(9,8,7,6,5,4,3,2,1,0],*p;for(p=a; p-a<10; p++)printf("%d,",*p);return 0;1运行结果:9.87654.321

#include int main (){ int a[10]={9,8,7,6,5,4,3,2,1,0},*p; for (p=a; p-a<10; p++) printf("%d,",*p); return 0; } 9,8,7,6,5,4,3,2,1, 注意: 也造成了指针p的移动。 运行结果:

利用指针变量使用数组元素利用和地址偏移量p-a实现数组元素的赋值p++ 风可替换成inta[5],*p=a,i;或或 或p+i&p[i]a+i p++汇for(i=0;i<5;i++)printf("a[%d]=",i);scanf("%d",&a[i])1for(p=a;p-a<5;p++)printf("a[%d]=",p-a);scanf("%d",p);

int a[5],*p=a,i; for(i=0;i<5;i++){ printf("a[%d]= ",i); scanf("%d",&a[i]); } 可替换成 &p[i] 或 a+i 或 p+i 或 p++ for( p=a; p-a<5; p++ ){ printf("a[%d]= ",p-a); scanf("%d",p); } ◼ 利用 p++ 和地址偏移量 p-a 实现数组元素的赋值

使用指针变量时应注意①指针的变化++、一一使指针按它所指向的类型所规定的字节数在内存区中移动(跳动而不是滑动)。②指针变量的运算++和*是同优先级、从右至左的结合方向。个>* (p++)等价*p++.等价*++p* (++p)③(*P)++表示P所指向的元素值加1

① 指针的变化 ++、 −−使指针按它所指向的类型所规定的字节数在内存区中移动(跳动而不是滑 动)。 ② 指针变量的运算 ++ 和 * 是同优先级、从右至左的结合方向。 *p++ → *(p++) 等价 *++p → *(++p) 等价 ③ (*p)++表示p所指向的元素值加1

常见的指针变量运算* (++p)先移指针,取出下一个单元的值。* (p++)先取出当前单元的值,再移指针。先取出当前单元值,再使当前单元加1。指针不移动(*p) ++先使前单元的值加1,再取出单元的值。指针不移动++ (*p)注意:*p++和*(p++)是等价的

◼ *(++p) 先移指针,取出下一个单元的值。 ◼ *(p++) 先取出当前单元的值,再移指针。 ◼ (*p)++ 先取出当前单元值,再使当前单元加1。指针不移动 ◼ ++(*p) 先使前单元的值加1,再取出单元的值。指针不移动 注意:*p++和*(p++)是等价的

通过指针的算术运算引用数组元素指向数组的指针可以指向数组中的其它元素。int main()(inta[10]=(2,4,5,8]int*p=a;//p指向a[o]printf("%4d",*p++);//输出a[0],p指向a[1]printf("%4d",*p++);//输出a[1],p指向a[2]printf("%4d",*p++);//输出a[2],p指向a[3]printf("%4d",*p++);//输出a[3]】,p指向a[4]return O;1245运行结果是:8

◼ 指向数组的指针可以指向数组中的其它元素。 int main(){ int a[10]={2,4,5,8}; int *p=a; //p指向a[0] printf("%4d",*p++); //输出a[0],p指向a[1] printf("%4d",*p++); //输出a[1],p指向a[2] printf("%4d",*p++); //输出a[2],p指向a[3] printf("%4d",*p++); //输出a[3],p指向a[4] return 0; } 运行结果是: 2 4 5 8

用*p++遍历整个数组#include int main()(注意:造成了指针p的移动。inta[]=(9,8,7,6,5,4,3,2,1,0),*p=a,ifor(i=o;i<sizeof(a)/sizeof(int)ii++)printf("%d ",*p++ );return o;-运行结果是:98653O24

#include int main(){ int a[]={9,8,7,6,5,4,3,2,1,0},*p=a,i; for(i=0;i<sizeof(a)/sizeof(int);i++) printf("%d ",*p++ ); return 0; } 9 8 7 6 5 4 3 2 1 0 注意: 造成了指针p的移动。 运行结果是:

共11页,试读已结束,阅读完整版请下载
刷新页面下载完整文档
VIP每日下载上限内不扣除下载券和下载次数;
按次数下载不扣除下载券;
注册用户24小时内重复下载只扣除一次;
顺序:VIP每日次数-->可用次数-->下载券;
相关文档