《计算机程序设计基础》课程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的移动。 运行结果是:
按次数下载不扣除下载券;
注册用户24小时内重复下载只扣除一次;
顺序:VIP每日次数-->可用次数-->下载券;
- 《计算机程序设计基础》课程PPT教学课件(C语言)第4章 数组和指针 4-13 字符串函数——大小写转换函数.pptx
- 《计算机程序设计基础》课程PPT教学课件(C语言)第3章 控制结构 3-1 基本控制结构.pptx
- 《计算机程序设计基础》课程PPT教学课件(C语言)第3章 控制结构 3-5 程序中的选择结构-switch语句.pptx
- 《计算机程序设计基础》课程PPT教学课件(C语言)第3章 控制结构 3-2 程序中的控制运算符.pptx
- 《计算机程序设计基础》课程PPT教学课件(C语言)第3章 控制结构 3-3 程序中的选择结构-if语句的简单形式.pptx
- 《计算机程序设计基础》课程PPT教学课件(C语言)第3章 控制结构 3-4 程序中的选择结构-if语句的嵌套形式.pptx
- 《计算机程序设计基础》课程PPT教学课件(C语言)第2章 基本数据类型和运算符 2-5 算术运算符和算术表达式.pptx
- 《计算机程序设计基础》课程PPT教学课件(C语言)第2章 基本数据类型和运算符 2-2 常量.pptx
- 《计算机程序设计基础》课程PPT教学课件(C语言)第2章 基本数据类型和运算符 2-1 基本数据类型.pptx
- 《计算机程序设计基础》课程PPT教学课件(C语言)第2章 基本数据类型和运算符 2-6 赋值运算符和赋值表达式.pptx
- 《计算机程序设计基础》课程PPT教学课件(C语言)第2章 基本数据类型和运算符 2-4 指针变量.pptx
- 《计算机程序设计基础》课程PPT教学课件(C语言)第2章 基本数据类型和运算符 2-3 变量.pptx
- 《计算机程序设计基础》课程PPT教学课件(C语言)第2章 基本数据类型和运算符 2-9 其他运算符.pptx
- 《计算机程序设计基础》课程PPT教学课件(C语言)第2章 基本数据类型和运算符 2-10 混合运算.pptx
- 《计算机程序设计基础》课程PPT教学课件(C语言)第2章 基本数据类型和运算符 2-8 逗号运算符和逗号表达式.pptx
- 《计算机程序设计基础》课程PPT教学课件(C语言)第2章 基本数据类型和运算符 2-7 自增和自减运算符.pptx
- 《计算机程序设计基础》课程PPT教学课件(C语言)第1章 C语言概述 1-3 算法的概念和特点.ppt
- 《计算机程序设计基础》课程PPT教学课件(C语言)第1章 C语言概述 1-2 结构化程序设计方法.ppt
- 《计算机程序设计基础》课程PPT教学课件(C语言)第1章 C语言概述 1-1 C语言的概述.ppt
- 《计算机程序设计基础》课程PPT教学课件(C语言)第1章 C语言概述 1-4 算法的表示.ppt
- 《计算机程序设计基础》课程PPT教学课件(C语言)第4章 数组和指针 4-15 指针变量的运算——赋值运算.pptx
- 《计算机程序设计基础》课程PPT教学课件(C语言)第4章 数组和指针 4-14 指向数组的指针定义与初始化.ppt
- 《计算机程序设计基础》课程PPT教学课件(C语言)第4章 数组和指针 4-9 字符串函数——strlen.pptx
- 《计算机程序设计基础》课程PPT教学课件(C语言)第4章 数组和指针 4-12 字符串函数——strcmp.pptx
- 《计算机程序设计基础》课程PPT教学课件(C语言)第4章 数组和指针 4-11 字符串函数——strcpy.pptx
- 《计算机程序设计基础》课程PPT教学课件(C语言)第4章 数组和指针 4-10 字符串函数——strcat.pptx
- 《计算机程序设计基础》课程PPT教学课件(C语言)第4章 数组和指针 4-6 字符数组的定义与初始化.pptx
- 《计算机程序设计基础》课程PPT教学课件(C语言)第4章 数组和指针 4-8 字符数组的输入与输出函数gets与puts.pptx
- 《计算机程序设计基础》课程PPT教学课件(C语言)第4章 数组和指针 4-7 字符数组的输入与输出格式符%c %s.pptx
- 《计算机程序设计基础》课程PPT教学课件(C语言)第6章 指针进阶与内存空间管理 6.3 函数指针.pptx
- 《计算机程序设计基础》课程PPT教学课件(C语言)第6章 指针进阶与内存空间管理 6.4 动态内存分配.pptx
- 《计算机程序设计基础》课程PPT教学课件(C语言)第6章 指针进阶与内存空间管理 6.5 main()函数的命令行参数.pptx
- 《计算机程序设计基础》课程PPT教学课件(C语言)第6章 指针进阶与内存空间管理 6.2 指针数组.pptx
- 《计算机程序设计基础》课程PPT教学课件(C语言)第6章 指针进阶与内存空间管理 6.1 指针再认识.pptx
- 《数据结构》课程授课教案(讲义,共十章).pdf
- 《数据结构》课程实验指导书.pdf
- 《数据结构》课程教学资源(试卷习题)多套练习题及参考答案.pdf
- 《数据结构》课程教学资源(试卷习题)十套数据结构试题及参考答案.pdf
- 《数据结构》课程教学资源(知识点)数据结构各章重点难点.pdf
- 《数据结构》课程教学课件(讲稿,C语言描述)第9章 排序.pdf