电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本
换一换
首页 金锄头文库 > 资源分类 > PPT文档下载
分享到微信 分享到微博 分享到QQ空间

c语言程序设计第六章 指针

  • 资源ID:48594270       资源大小:395.50KB        全文页数:69页
  • 资源格式: PPT        下载积分:10金贝
快捷下载 游客一键下载
账号登录下载
微信登录下载
三方登录下载: 微信开放平台登录   支付宝登录   QQ登录  
二维码
微信扫一扫登录
下载资源需要10金贝
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
如填写123,账号就是123,密码也是123。
支付方式: 支付宝    微信支付   
验证码:   换一换

 
账号:
密码:
验证码:   换一换
  忘记密码?
    
1、金锄头文库是“C2C”交易模式,即卖家上传的文档直接由买家下载,本站只是中间服务平台,本站所有文档下载所得的收益全部归上传人(卖家)所有,作为网络服务商,若您的权利被侵害请及时联系右侧客服;
2、如你看到网页展示的文档有jinchutou.com水印,是因预览和防盗链等技术需要对部份页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有jinchutou.com水印标识,下载后原文更清晰;
3、所有的PPT和DOC文档都被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;下载前须认真查看,确认无误后再购买;
4、文档大部份都是可以预览的,金锄头文库作为内容存储提供商,无法对各卖家所售文档的真实性、完整性、准确性以及专业性等问题提供审核和保证,请慎重购买;
5、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据;
6、如果您还有什么不清楚的或需要我们协助,可以点击右侧栏的客服。
下载须知 | 常见问题汇总

c语言程序设计第六章 指针

第六章 指针6.1 指针的概念 6.2 指针变量的定义和引用 6.3 指针与数组 6.4 指针与函数 6.5 多级指针6.1 指针的概念q指针是C语言的重要特色,正确的 应用指针,可以:v使程序简洁、紧凑、高效;v有效地表达复杂的数据结构;v动态分配内存,直接处理物理内 存地址;v得到多于一个的函数返回值。变量与地址q变量是对程序中数据存储空间的抽象q变量的地址是其存储单元的首字节地 址程序中: short i;float k; .2000 2001 20022005内存 02003编译或函数调用 时为变量分配内 存单元ki指针与指针变量q指针:变量的地址 q指针变量:专门用来存放变量地址的变 量.20002004 2005变量 i10变量i_pointer2001 2002 2003变量i的内 容指向变量i的 指针变量变量i 的地 址 (指针)i_pointer 的内容是 i 的地址2000-直接访问.2000200420062005i 10i_pointer20012002200320003例 *i_pointer=20; -间接访问206.2 指针变量的定义和引用q指针变量的定义q指针变量的初始化q指针变量的引用q指针运算指针变量的定义q定义形式:类型说明符 * 指针变量名;q例: int *ip, i; /* 定义ip为整型指针变量,i为整型变量 */ char * name; /* 定义name为char型指针变量*/ float *fp1; /* 定义fp1为float型指针变量*/指针的目标变 量的数据类型表示定义指 针变量合法标 识符指针变量的初始化q一般形式: 数据类型 *指针变量名=初始地址值 ;例: int i, *p=float *p1= int *p2=p;int *p3=100; static *p4= 可以用已初始化的指 针变量作初值不能用auto变量的地址 去初始化static型指针指针变量与目标变量 的数据类型应一致不能用非地址型数据 为指针变量赋值空指针与野指针q空指针:其值为0(用NULL表示)的 指针。如: int *p=0; 或 int *p=NULL;q野指针:未初始化的指针,其值不确 定。q空指针不指向任何目标,野指针指向 不确定的目标。q比较:int i; int *p1= /*p1指向变量i*/float *p2; /*p2的指向不确定*/char *p3=NULL; /*p3不指向任何目标*/指针变量的引用q通过引用指针变量,可以间接访问目 标变量。修改指针,则访问目标也改 变。 q例:int i, j;int *p;i=0; j=i; /* 直接访问i , j */p = /* p指向i */*p = 100; /* 间接访问i */p = /* p指向j */*p = 200; /* 间接访问j */结果:i=100j=200指针变量应用举例 例6-1 #include void main() int var; int *p; var = 10; p = /*必须先对p 赋值,才能引用*/printf(“printf(“var=%d, *p=%dn“, var, *p); *p=100; printf(“var=%d,*p=%dn“, var, *p); 注意:引用空指针和野 指针是严重的运行错误 !指针应用举例例6-2:输入两个数,按由大到小的顺序输出 。 void main() int *p1, *p2, *p, a, b;scanf(“%d,%d“, p1=p2=if(a * > +,- 如:x=*p+; x=*p; p=p+1;x=*+p; p=p+1; x=*p;x=(*p)+; x=*p; *p=*p+1;q指针相减运算:设p1和p2指向同一数 组中的不同元素,则 p1-p2为两个指针 之间的数组元素个数。如:int a10;int *p=int *p1= int *p2= 则:p2-p1的值为3a0 a1 a2 a3 a4 a5 a6 a7 a8 a9a数组pp1 p2 指针的关系运算q若p1和p2指向同一数组,则:vp1p2 表示p1指的元素在后vp1=p2 表示p1与p2指向同一元素vp1!=p2 表示p1与p2指向不同元素 q若p1与p2不指向同一数组,比较无意 义 q单个指针可与空指针值比较:p=NULL 或 p!=NULL指针的赋值运算q只能用同类型的地址常量或变量对指针 赋值。q常用赋值方法举例: double d, a5, *p, *p1, *p2; p1= /*将变量d的地址赋值p1 */ p2=p1; /*将指针p1复制给指针p2 */ p=a; /*将数组a的首地址赋给 p*/ p= /*将数组元素a3的地址赋给p */指针运算举例q例6-3:输入一个整数,统计其数据位数(不 包括符号位)并对不正确的字符进行判断。 #include void main( ) char *p, number100=“; int flag=0, count=0; p=number; printf(“Please input a number: “); scanf(“%s”, number); /*检查第一个字符,若不是+ - 09 则错*/ if(*p)=-|(*p)=+) flag=1; /* 有符号 */ else if(*p)'9') flag=2; /* 输入错 */*从第二个字符开始,检查输入的字符串*/p+;while(*p /*不是09则错*/p+;if(flag=2) /*输入有误*/printf(“input error!n“);else if(flag=0) /*无符号位*/count=p-number;else count=p-number-1; /*有符号位,减1*/ printf(“count of numbers :%dn“,count); 6.3 指针与数组q数组名是表示数组首地址的地址常量a int *ip;ip=a; ip= q引用指针,访问数组元素 例:*(ip+5)=10; *(a+5)=10; a5=10; q移动指针,访问数组元素,执行效率高 例: *(+ip)=10; *(ip+1)=10;/指针是否发生变化 *(+a)=10; / 错误,a是指针常量,不可修改数组元素表示方法int a10, *p=a; 则:ai pi *(p+i) *(a+i)pp+9p+1 p+2*p *(p+1) *(p+2)*(p+9 )2 7 4 68.a p=a; /*使用前先赋值 */for(i=0; i void main( ) char *p=“I am a student.“; int i; printf(“%sn“, p);for(i=0; pi!='0' i+) printf (“%c“, pi);printf(“n“);p+=5; /*p向后移动5个数据单位*/ printf(“%sn“, p ); 输出: I am a student.I am a student.a student.pi=*(p+i) p未移动指针数组q指针数组:由同类型的指针变量为元素 构成的数组。q定义:类型说明符 *数组名常量表达式例如:float *p_num10;定义了一个由10个指向float型变量的指 针构成的数组。q指针数组的初始化char *name5=“Li“,“Liu“,“Chen“;例:用指针数组表达多个字符串char *name5=“Li“,“Liu“,“Chen“;name0name1name2name3name4char *name5LNULLNULLi0L i0unC h0e指针数组应用举例q指针数组常用于处理二维数组或多个字 符串 q例:利用指针数组显示菜单。 #include void main() char *menu5=“1 input“,“2 copy“,“3 move“,“4 delete“,“5 exit“;int i;for(i=0; i void constr_a(char str1, char str2, char str3) int i=0, j=0; while(str1i!=0) str3i=str1i; i+; while(str2j!=0) str3i+j=str2j;j+; str3i+j='0' 例:合并两个字符串void constr_p(char *str1, char *str2, char *str3) while(*str1) *str3+ = *str1+; while(*str2) *str3+ = *str2+; *str3=0; void main() char s1=“Happy“; char s2=“ New Year!“; char s320; constr_a(s1,s2,s3); puts(s3); constr_p(s1,s2,s3); puts(s3);输出:Happy New Year!Happy New Year!函数的返回值为指针 q函数的返回值可以是int型、float型、 char型,也可以是一个指针类型。q定义格式:函数类型 *函数名(形参表)例:int *func() int *p;return(p);函数func返回一个指向整型数据的指针。例:显示菜单项内容#include /*定义菜单为全局字符指针数组menu*/ char *menu5=“1 input“,“2 copy“,“3 move“,“4 delete“,“5 exit“ ;/*根据菜单号返回菜单项字符串,为指针数组元素 */ char * menu_item(int i) if (i4) return NULL; else return (menui); void main() char * item;int i, number;for(i=0; i /*被积函数*/ float f1(float x) return (1+x*x); float f2( float x) return(1+x+x*x+x*x*x); float f3( float x) return(x/(1+(x*x); /*通用积分函数。形参fun、a、b分别表示 */ /*定积分的函数名和积分上下限。 */ float integral(float (*fun)(float),float a,float b) float s, h, y;int n, i;s=(*fun)(a)+(*fun)(b)/2.0;/*调用fun所指向

注意事项

本文(c语言程序设计第六章 指针)为本站会员(飞***)主动上传,金锄头文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即阅读金锄头文库的“版权提示”【网址:https://www.jinchutou.com/h-59.html】,按提示上传提交保证函及证明材料,经审查核实后我们立即给予删除!

温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.