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

C语言课程课件 第八章 地址和指针

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

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

C语言课程课件 第八章 地址和指针

第8章 地址和指针 8.1 变量的地址和指针 8.2 指针变量的定义和指针变量的基类型 8.3 给指针变量赋值 8.4 对指针变量的操作 8.5 函数之间地址值的传递考试的重点8.1 变量的地址和指针计算机的内存是以字节为单位的一片连续的存储空间,每一个字节都有一个 编号,这个编号就成为内存地址。 内存空间 地址1010 1011 1012 1013 1014 1015 1016 : : :1200 1201 1202 1203 1204 1205例如:short a,b;float x;a=3;b=5;x=3.5;: : :2002 2003 2004 2005abx353.5每个变量的地址是指该变量所占 存储单元的第一个字节的地址。在C语言中,我们可以定义整型变量、实型变量、字符变量。 他们都是用来存放数据的。 今天,我们来学习一下特殊的变量,这种变量只是用来存放 内存地址的。比如我们定义了一个指针变量pp占4个字节该变量中只能存放内存地址,比如把变量a的地址赋予指针 变量p,则指针变量p的值为1012。1012请问当访问变量a时,访问的是什么? 当访问指针变量p时,访问的是什么?3 1012当访问变量时,为“直接存取(直接访问)”。 我们也可以通过指针变量间接的访问该地址中原来的值。此时 称为“间接存取(间接访问)”。8.2 指针变量的定义和指针变量的基类型定义指针变量的一般形式如下:类型名 *指针变量名; 或 类型名 *指针变量名1, *指针变量名2,;例如:int *pi;int *pj,*pa;1. pi,pj,pa都是变量,不过都是指针变量,定义时在普通变量名的左边加上星号就行了。说明:2. pi,pj,pa三个指针变量的类型为整型,说明三个变量中只能存放int类型变量的地址。这时我们称int是指针变量pi,pj,pa的基类型。如:double *pd;char *s1,*s2;pd的基类型为double类型,在指针变量pd中,只能存放double类型变量的地址。s1和s2的基类型为char类型,在指针变量s1和s2中,只能存放char类型变量的地址。8.3 给指针变量赋值8.3.1 给指针变量赋地址值例如:int k,*q,*p; /*k为整型变量,q和p都是指针变量。*/qpkk=1;/*给普通变量赋值*/整型变量k只被能赋予整型值,赋值时直接赋值就可以 了,而指针变量只能被赋予地址值,如下是把整型变 量k的地址赋值给指针变量q。q=p=NULL; int *p; p=0; int *p; p=0; 注意此时,指针变量p中不是没有值,而是有一个“空”值。8.4 对指针变量的操作8.4.1 通过指针来引用一个存储单元#include main() int k,*q,*p;k=1;q=p=q;printf(“%dn%dn%dn“,k,q,p); 1 1245052 1245052输出时,变量k为1,而指针变量q和p则为变量k的地址。#include main() int k,*q,*p;k=1;q=p=q;printf(“%dn%dn%dn“,k,*q,*p); 1kp= j=*p;/*定义了三个变量*/ /*取变量i的地址赋给指针变量p*/ /*间接访问指针变量中的值10赋给变量j*/p10ij10j=i;间接访问运算符*是一个单目运算符,必须出现在运算对象的左边。其运算对象 可以是存放地址的指针变量,也可以是地址。j=*(j=*扩展知识:j=*p+1;10j11jint *p,k=0; p=pk*p=100;1000k=100 ;*p=*p+1;k=k+1;101*p+=1; 或 +*p; 或 (*p)+;k+=1; 或 +k; 或 k+;若有以下定义和语句: int *p,*s,k=20; s= p= ps 20k 在定义指针变量时,*指针变量名用于存 放普通变量的地址;*指针变量名用于存 放指针变量的地址; int *p,*s,k=10; s=pa=pb=pmin=scanf(“%d%d”,pa,pb);printf(“a=%d b=%dn”,a,b);*pmin=*pa;if(*pa>*pb) *pmin=*pb;printf(“min=%dn”,min); papbpminabmin/*输入的值依次放入pa、pb所指存储单元中*/scanf(“%d%d”,比如输入:41 324132a=41 b=32 min=a;41if(a>b) min=b;32min=32 8.4 对指针变量的操作8.4.2 移动指针 p=pq=p+2; q+; q+; q-; p+;qqqp当有:int i,j,k;i=*p;j=*q;k=q-p;ijk22 44 2指针比较if(p int myadd(int *a,int *b) int sum;sum=*a+*b;return sum; main() int x,y,z;printf(“Enter x,y:”); scanf(“%d%d”,z=myadd(printf(“%d+%d=%dn”,x,y,z); xyzEnter x,y: 24 4124 41调用传递absumsum=x+y;65退出函数,将变量sum的值作 为这个函数的返回值,返回到 他的调用处。此时,该函数中 的变量全部释放。65 6524+41=65 8.5 函数之间地址值的传递8.5.2 通过传递地址值在被调用函数中直接改变调用函数中的变量的值例8.3 调用swap函数,交换主函数中变量x和y中的数据。 第七章例7.3的重写 #include void swap(int *,int *); main() int x=30,y=20;printf(“(1)x=%d y=%dn“,x,y);swap(printf(“(4)x=%d y=%dn“,x,y); void swap(int *a,int *b) int t;printf(“(2)a=%d b=%dn“,*a,*b);t=*a;*a=*b;*b=t;printf(“(3)a=%d b=%dn“,*a,*b); /*函数说明语句*/xy(1)x=30 y=20调用传递abt(2)a=30 b=20(3)a=20 b=30退出该函数,返回到它的调用处, 该函数无返回值,因为该函数为 void类型,此时该函数中的变量全 部释放。(4)x=20 y=30t =x;x=y;y=t;302020308.5 函数之间地址值的传递8.5.2 通过传递地址值在被调用函数中直接改变调用函数中的变量的值例8.4 编写函数order(int *a,int *b),使调用函数中的第一个实参总是存放两个数中 的较小的数,第二参数存放两个数中较大的数。 #include void swap(int *x1,int *x2) int t;t=*x1;*x1=*x2;*x2=t; void order(int *a,int*b) if(*a>*b) swap(a,b); main() int x,y;printf(“Enter x,y:“); scanf(“%d%d“,printf(“x=%d y=%dn“,x,y);order(printf(“x=%d y=%dn“,x,y); xyEnter x,y: 41 244124x=41 y=24 调用ab传递if(x>y) swap(a,b);调用并传递数据x1x2t=x;x=y;y=t;2441x=24 y=41 8.5 函数之间地址值的传递8.5.3 函数返回地址值#include int *fun(int *,int *); main() int *p,i,j;printf(“Enter two number:“); scanf(“%d%d“,p=fun(printf(“i=%d,j=%d,*p=%dn“,i,j,*p); int *fun(int *a,int *b) if(*a>*b) return a;return b; /*函数说明*/例8.5 程序举例。pijEnter two number:99 10199101传递abif(i>j) return a;退出该函数,返回到它的调用处, 该函数的返回值是一个地址(j的地 址),所以该函数是一个指针类型。 退出时该函数中的变量全部释放。i=99,j=101,*p=101 习题一.选择题 8.1 若有定义:int x,*pb;则正确的赋值表达式是 A pb= 程序的输出结果是 A 因变量无定义输出不定值 B 0 C -1 D 1 8.3 若有以下程序: #include void sub(int x,int y,int *z) *z=y-x; main() int a,b,c;sub(10,5, sub(7,a, sub(a,b,printf(“%d,%d,%dn“,a,b,c); 程序的输出结果是 A 5,2,3 B -5,-12,-7 C -5,-12,-17 D 5,-2,-7ABB习题8.4 若有以下程序: #include main() int k=2,m=4,n=6,*pk=*(p= printf(“%dn“,n); 程序的输出结果是 A 4 B 6 C 8 D 10 8.5 若指针p已正确定义并指向如图所示存储单元: 则执行语句*p+; 后,*p的值是 A 20 B 30 C 21 D 31 8.6 若指针p已正确定义并指向如图所示存储单元,则*+p的值是 A 20 B 30 C 21 D 31 8.7 若指针p已正确定义并指向如图所示存储单元,则+*p的值是 A 20 B 30 C 21 D 31a0 a1 a2 a3 a410 20 30 40 50pCBBC习题8.8 若有以下程序: #include void prtv(int *x) printf(“%dn“,+*x); main() int a=25;prtv( 程序的输出结果是 A 23 B 24 C 25 D 26 8.9 若有以下程序 #include main() int *k,*a,b=100;a=k=printf(“%dn“,*k); 程序的输出结果是 A 运行错误 B 100 C a的地址 D b的地址DB习题8.10 若有以下程序: #include void fun(float

注意事项

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

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




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