电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

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

20页
  • 卖家[上传人]:杨****
  • 文档编号:36589778
  • 上传时间:2018-03-30
  • 文档格式:PPT
  • 文档大小:497KB
  • / 20 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 1、第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时,访问的是什么?

      2、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只被能赋予整型值,赋值时直接赋值

      3、就可以 了,而指针变量只能被赋予地址值,如下是把整型变 量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

      4、;*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(ab) 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

      5、) 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;*

      6、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(“

      7、x=%d y=%dn“,x,y); xyEnter x,y: 41 244124x=41 y=24 调用ab传递if(xy) 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(ij) return a;退出该函数,返回到它的调用处, 该函数的返回值是一个地址(j的地 址),所以该函数是一个指针类型。 退出时该函数中的变量全部释放。i=99,j=101,*p=101 习题一.选择题 8.1 若有定义:int x,*pb

      8、;则正确的赋值表达式是 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语言课程课件 第八章 地址和指针》由会员杨****分享,可在线阅读,更多相关《C语言课程课件 第八章 地址和指针》请在金锄头文库上搜索。

      点击阅读更多内容
    最新标签
    发车时刻表 长途客运 入党志愿书填写模板精品 庆祝建党101周年多体裁诗歌朗诵素材汇编10篇唯一微庆祝 智能家居系统本科论文 心得感悟 雁楠中学 20230513224122 2022 公安主题党日 部编版四年级第三单元综合性学习课件 机关事务中心2022年全面依法治区工作总结及来年工作安排 入党积极分子自我推荐 世界水日ppt 关于构建更高水平的全民健身公共服务体系的意见 空气单元分析 哈里德课件 2022年乡村振兴驻村工作计划 空气教材分析 五年级下册科学教材分析 退役军人事务局季度工作总结 集装箱房合同 2021年财务报表 2022年继续教育公需课 2022年公需课 2022年日历每月一张 名词性从句在写作中的应用 局域网技术与局域网组建 施工网格 薪资体系 运维实施方案 硫酸安全技术 柔韧训练 既有居住建筑节能改造技术规程 建筑工地疫情防控 大型工程技术风险 磷酸二氢钾 2022年小学三年级语文下册教学总结例文 少儿美术-小花 2022年环保倡议书模板六篇 2022年监理辞职报告精选 2022年畅想未来记叙文精品 企业信息化建设与管理课程实验指导书范本 草房子读后感-第1篇 小数乘整数教学PPT课件人教版五年级数学上册 2022年教师个人工作计划范本-工作计划 国学小名士经典诵读电视大赛观后感诵读经典传承美德 医疗质量管理制度 2 2022年小学体育教师学期工作总结 2022年家长会心得体会集合15篇
    关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
    手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
    ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.