c语言指针与一维数组PPT,C语言课件:9-2指针与一维数组

本文详细介绍了C语言中指针与一维数组的关系和操作,包括指针指向数组首元素的方式、通过指针访问数组元素的各种方法、字符串与指针的交互以及相关操作,如字符串复制、连接和去除尾部空格等。同时,讨论了指针类型的强制转换和字符串长度的计算。
摘要由CSDN通过智能技术生成

《C语言课件:9-2指针与一维数组》由会员分享,可在线阅读,更多相关《C语言课件:9-2指针与一维数组(26页珍藏版)》请在人人文库网上搜索。

1、第九章 指针,指针与一维数组,2,指针特别适用于访问在内存中连续存储的相同类型的数据。如:一维数组、二维数组等。,int a10; int *p; p = /通常指向首元素,以一维数组为例: 先定义一个指向类型为数组基类型的指针,再让指针指向某个数组元素,即可操作数组中的每一个元素。,指针加减运算规则的应用,3,#include main( ) int a5 = 1, 2, 3, 4, 5; int i; for (i = 0; i 5, i+) scanf(%d, ,#include main( ) int a5 = 1, 2, 3, 4, 5, i; int *p= ,下标法,指针法,4,。

2、#include main( ) int a3 = 1, 2, 3; printf(%d, a0); /1 printf(%d, a1); /2 printf(%d, a2); /3 printf(%p, a); /0012FF00 ,数组名本身也具有数值,其内容是数组的首地址,是一个指针常量。,地址与运行环境有关,5,int a4;,数组名是数组首元素的地址 a = ,*( )与 是完全等价的!,等价定律,通式,7,int a10; int *p; p = a;,int a10, *p; p = a;,int a10, *p=a;,int a10, *p= ,int a10; int *p;。

3、 p = ,int a10, *p; p = ,用指针变量访问一维数组,以下几种写法等价:,注意区别: a是常量,p是变量,a是指向首元素的指针常量, 元素指针, 指针类型是int *,8,int a4, *p=a;,注意:一但p的值被改变, 以上等式不成立,9,int a4, *p=a;,p的值被改变后,以上等式仍然成立。 但与a数组元素不对应。,10,#include main( ) int a6 = 1,2,3,4,5,6, *p= /5 ,#include main( ) int a=258, *p= /258 与*p等价 ,11,main( ) int a5, i; for (i =。

4、 0; i 5; i+) scanf(%d, ,main( ) int a5, i; for (i = 0; i 5; i+) scanf(%d, a+i); for (i = 0; i 5; i+) printf(%d , *(a+i); ,下标法,地址法,访问一维数组元素的多种方法,12,main( ) int a5, i, *p = a; for (i = 0; i 5; i+) scanf(%d, p+i); for (i = 0; i 5; i+) printf(%d , *(p+i); ,main( ) int a5, i, *p= ,指针法,指针-下标法,访问一维数组元素的多种方。

5、法,13,指针法(注意指针被改变了),main( ) int a5, i, *p= ,main( ) int a5, *p; for (p = a; p - a 5; p+) scanf(%d, p); for (p = a; p - a 5; p+) printf(%d , *p); ,访问一维数组元素的多种方法,指针法(指针做为循环变量),14,#include #define N 5 main( ) int aN = 5, 7, 3, 6, 2; int *p, max; p = a; max = *p+; for (; p max) max = *p; printf(max=%dn, 。

6、max); ,求一批整数的最大值,#include main( ) int a5=1,2,3,4,5, i, *p; p=a+2; for (i = 0; i 3; i+) printf(%d , pi); /3 4 5 i = (*-p)+; printf(%d , i); /2 printf(%d , a1); /3 ,指针练习,15,char a =1234567890;,16进制表示,指针与字符串,16,char a6 = 12345; /a是指针常量, 指针类型是char *,a+;非法,char *p=a; /p是指针变量, 指针类型是char * char *p=,p+;合法,如。

7、果字符数组中存放的是字符串,则数组名可看做是字符串的首地址。,a, p俗称为字符串。,17,#include main( ) char a20, b = 123; int i; for (i = 0; bi!=0; i+) ai = bi; ai = 0; puts(a); ,#include main( ) char a20, b = 123; int i; for (i = 0; *(b + i); i+) *(a + i) = *(b + i); *(a + i) = 0; puts(a); ,注意:扫描字符串的方法。,复制字符串,18,#include main( ) char a20。

8、, b = 123, *p, *q; for (p = a, q = b; *q; p+, q+) *p = *q; *p = 0; puts(a); ,#include main( ) char a20, b = 123, *s = a, *t = b; while (*s+ = *t+); puts(a); ,指针做为循环变量,上面程序的简化,19,#include main( ) char s = abc; char *t = s; while (*t) t+; printf(%d, t - s); ,#include main( ) char s = abc; char *t = s;。

9、 while (*t+); printf(%d, t - s - 1); ,计算字符串的长度,20,#include main( ) char a20=abc; char b = 123; int i = 0, j = 0; while (ai) i+; while (ai+ = bj+); puts(a); ,#include main( ) char a20 = abc; char b = 123; char *s = a, *t = b; while (*s) s+; while (*s+ = *t+); puts(a); ,连接字符串,21,char a5 = a, b, c, d, 。

10、0; char a5 = a, b, c, d; char a5 = abcd; char a5 = abcd;,a+;合法,char *a = abcd;,char *a; a = abcd; /合法,char a5; a = abcd; /非法,a是指针变量。将字符串的首地址赋给a。,a+;非法,a是指针常量。只能在定义时赋初值。,定义字符串的多种方法(实际上就是两种),22,#include main( ) char a20 = xyz; *a = w; /a+; /错误 printf(%s, a); /结果:wyz,#include main( ) char *a = xyz; /*a。

11、 = w; /错误 a+; printf(%s, a); /结果:yz,字符串被分配在动态数据区(栈)中。 a不能被改变,字符串内容可以被改变。,字符串被分配在静态只读区。 a可以被改变,字符串内容不能被改变。,两种定义字符串方法的对比,23,#include main( ) char *a; /指针未赋值 scanf(%s, a); printf(%s, a); ,错误的,#include main( ) char a20; /分配空间 scanf(%19s, a); printf(%s, a); ,正确的,以下程序的输出结果是( 68 ) char str =ABCD, *p=str; p。

12、rintf(%dn,*(p+3);,练习,24,#include main( ) char a20 = 12345678; char *pc; int * pi; pc = a; pi = (int *)a; /强制类型转换 pc+; pi+; printf(%x, *pc); /32 printf(%x, *pi); /38373635 ,练习:指针类型的强制转换,25,#include void del(char *p) while (*p) p+; while (*-p= ); *+p=0; main( ) char s20; gets(s); del(s); printf(%s, s)。

13、; ,#include main( ) char s20=ABC DE ; char *p; for (p=s; *p!=0; p+); for (p-; *p= ; p-); p+; *p=0; printf(%s, s); ,例题:删除字符串的所有尾部空格,26,#include main( ) char a20=abcdefghij; char *p = a; int i; for (i=0; *p!=0; i+, p+) if (i=6) *p=#; printf(%sn, a); ,#include main( ) char a20=abcdefghij; char *p = a; while (p - a 6) p+; while (*p) *p+=#; printf(%sn, a); ,例题:从下标为6的元素开始全部设置#号。

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 、4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。、可私 6信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 、4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。、可 6私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 、4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。、可私 6信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值