C语言程序设计课件0910指针.ppt

C语言程序设计课件0910指针.ppt

ID:59421417

大小:111.50 KB

页数:56页

时间:2020-09-19

C语言程序设计课件0910指针.ppt_第1页
C语言程序设计课件0910指针.ppt_第2页
C语言程序设计课件0910指针.ppt_第3页
C语言程序设计课件0910指针.ppt_第4页
C语言程序设计课件0910指针.ppt_第5页
资源描述:

《C语言程序设计课件0910指针.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、指针课程:程序设计语言教材:谭浩强《C程序设计》第三版教师:陈小荷本章重点地址和指针的概念如何定义和使用指针变量理解指针与数组(包括字符数组)的关系理解指针与函数的关系指针数组和多级指针无用的swap,为什么?voidswap(intx,inty){inttmp=x;x=y;y=tmp;}voidmain(){inta=2,b=5;swap(a,b);printf(“a=%d,b=%d”,a,b);}输出结果:a=2,b=5带参宏SWAP太累赘,怎么办?#defineSWAP(x,y,tmp)tmp=x;x=y;y=tmp;voidmain(){inta=3,b=9,tmp;printf

2、("a=%d,b=%d",a,b);SWAP(a,b,tmp);printf("AfterSWAP,a=%d,b=%d",a,b);}不得已而暴露细节指针做参数的swap才有用!voidswap(int*x,int*y){inttmp=*x;*x=*y;*y=tmp;}voidmain(){inta=2,b=5;swap(&a,&b);printf(“a=%d,b=%d”,a,b);}输出结果:a=5,b=2指针是什么?指针就是内存地址,例如,inta=2,b=5;其地址分别是0x0012ff7c和0x0012ff78.直接寻址:根据变量名找到地址,然后对该地址中的数据进行读或写

3、。间接寻址:将变量的地址赋给一个指针变量,然后凭借指针来对该变量进行读或写:int*p=&a;*p=100;printf(“%d”,*p);这里p是一个指针变量,*p则是p所指的那个变量,对*p的操作即是对a的操作。指针可以做什么?作为函数参数时,可以改变它所指的变量的值。例如在swap函数中,形参x和y分别指向a和b,交换*x和*y的值,就是交换a和b的值。作为函数参数时可以使函数得到多个计算结果。数组名就是地址,因此指针可以更方便、有效地处理数组(包括字符数组)。指针还可以做什么?可以用来动态分配内存,例如,对n个整数进行排序,如果必须在程序开始后才能得知n值,就无法做静态分配。可以用来

4、表示更复杂的数据结构如链表、二叉树,等等。关于这个问题,看下一章“结构体与共用体”。如何定义指针变量?基类型*指针变量名int*pn;float*pf;charc,*pc;以上分别定义了指向整型、实型、字符型数据的指针变量pn,pf,pc。第三例表明,指针变量可以跟基类型相同的非指针变量一起定义。如何给指针变量赋值?给指针变量赋值,就是将一个内存地址存放在指针变量中。赋值方式之一:将某变量的地址赋给指针变量,这需要用到地址运算符“&”,例如:intn,*pn;pn=&n;赋值方式之二:将数组的某个元素的地址赋给指针变量,数组名是第0个元素的地址,不需加地址运算符,例如:inta[10],*p

5、a;pa=a;如何给指针变量赋值?赋值方式之三:将一个符号常量NULL赋给指针变量,使其成为空指针。空指针不指向任何变量,因此它是安全的。例如:char*p=NULL;赋值方式之四:申请从堆(Heap)中分配一块内存,并且将这块内存的首地址赋给指针变量。这叫动态分配内存。例如:char*p=(char*)malloc(1024);指针变量赋值以后intn,*pn;pn=&n;指针变量pn现在指向n,如果依次执行:*pn=100;(*pn)++;则n的值依次为100,101.这里的星号叫做指针运算符,跟指针变量一起用来表示该指针变量所指的变量。pn与n的关系并非一成不变的,例如:intm;pn

6、=&m;此时pn变为指向m了,要不怎么叫做指针变量呢?例10.1通过指针变量访问整型变量voidmain(){inta,b,*p1,*p2;a=100;b=10;p1=&a;p2=&b;printf(“%d,%d”,a,b);printf(“%d,%d”,*p1,*p2);}程序的输出是什么?地址运算符和指针运算符&取变量的地址*表示指针所指的变量,因此它们互为逆运算。优先级都是2,结合方向都是自右至左。&*p表示什么?*p表示p所指的变量,&*p相当于&(*p),表示p所指的变量的地址,其实就是p(已经有所指的p)。*&a表示什么?&a是a的地址,*&a相当于*(&a),表示该指针

7、所指的变量,它就是a。例10.2两个整数降序输出voidmain(){int*p1,*p2,a,b;scanf(“%d%d”,&a,&b);p1=&a;p2=&b;if(a

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。