第3次课-指针变量的定义和运算指针变量作函数参数课件_第1页
第3次课-指针变量的定义和运算指针变量作函数参数课件_第2页
第3次课-指针变量的定义和运算指针变量作函数参数课件_第3页
第3次课-指针变量的定义和运算指针变量作函数参数课件_第4页
第3次课-指针变量的定义和运算指针变量作函数参数课件_第5页
已阅读5页,还剩65页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

同学们,加油噢!同学们,加油噢!1教学主题指针变量的定义和运算、指针变量作函数参数教学目标通过本次课的学习,使学生掌握指针的概念、指针变量的概念和定义方法、指针变量的运算、以及指针变量作为函数参数的用法。教学重点1、指针变量的定义、赋值2、指针变量的运算3、指针变量作为函数参数的用法教学难点1、指针和指针变量的区别2、指针变量作为函数参数的实质及效果教案教学主题指针变量的定义和运算、指针变量作函数参数教学目标2主要内容

指针和指针变量的概念

指针变量的定义和赋值

指针变量的运算

指针变量作为函数的参数主要内容指针和指针变量的概念3为什么引入指针

指针是C语言的特色、精华程序设计时应用指针的好处①支持动态分配内存②能有效而方便地使用数组(包括字符串)③可以在函数调用时返回多个值为什么引入指针指针是C语言的特色、精华4举例在程序中,有如下语句。问:内存中会如何变化?intx,y;x=12;y=20;1220内存单元的编号,叫地址&x&y举例在程序中,有如下语句。问:内存中会如何变化?1220内5内存地址在计算机中,所有的数据都是存放在存储器中的。一般把存储器中的一个字节称为一个内存单元。为了正确地访问这些内存单元,必须为每个内存单元编上号。根据编号就可以准确地找到该内存单元。内存单元的编号也叫做内存地址。内存地址在计算机中,所有的数据都是存放在存储器中的。6程序中一个变量包含了两个概念:①变量在内存中的地址②存放在该地址中的内容注意变量的地址是由系统分配的,在程序中只可使用,不能修改。内存单元的地址和内存单元的内容内存单元的地址内存单元的内容程序中一个变量包含了两个概念:内存单元的地址和内存单元的内7指针和指针变量的定义C语言中,将地址形象化地称为“指针”。意思是通过它可以找到以它为地址的内存单元。一个变量的地址称为该变量的指针。即:指针就是内存地址。如果一个变量专门存放另一个变量的地址(即指针),则称为指针变量。问:指针、指针变量是一回事吗?指针和指针变量的定义C语言中,将地址形象化地称为“指针”。8指针变量举例在图6-2中,变量x占用了20A0起的2个内存单元,其内容(值)为12。设有指针变量P,内容为20A0。这种情况我们称为P指向变量x,或称P是指向变量x的指针变量。返回指针变量举例在图6-2中,变量x占用了20A0起的2个内存9指针变量的定义定义指针变量时要包括三个内容:①指针变量类型说明,即标明变量为一个指针变量。②指针变量名。③指针变量所指向的变量的数据类型。其一般形式为:

类型标识符*指针变量名;标明这是一个指针变量变量名本指针变量所指向的变量的数据类型指针变量的定义定义指针变量时要包括三个内容:标明这是一个指10定义指针变量举例针对图6-2,应该如何定义x和p?intx;int*p;表示p是一个指针变量,它指向某个整型变量。如何给这两个变量赋值?x=12;

p呢?定义指针变量举例针对图6-2,应该如何定义x和p?11指针变量的赋值指针变量同普通变量一样,使用之前不仅要定义,而且必须赋予具体的值。给指针变量赋值只能赋予地址,不能赋予任何其它数据。C语言中提供了地址运算符&来表示变量的地址。其一般形式为:&变量名例如:&a变示变量a的地址。指针变量的赋值指针变量同普通变量一样,使用之前不仅要定义,而12指针变量赋值举例针对图6-2,有如下语句:intx;int*p;

x=12;如何给p变量赋值?

p=&x;如何在定义的同时给变量赋值?

intx=12;int*p=&x;在用之前,x已定义指针变量赋值举例针对图6-2,有如下语句:在用之前,x已定13给指针变量赋值时的注意点可以让指针变量不指向任何变量。int*p;p=NULL;(NULL在stdio.h中有定义)通常不允许直接把一个数值赋给指针变量。int*p;p=1000;被赋值的指针变量前不能再加“*”说明符。inta,*p;*p=&a;一个指针变量只能指向同类型的变量。floatb;int*p;p=&b;错误的用法错误的用法错误的用法给指针变量赋值时的注意点可以让指针变量不指向任何变量。错误14指针变量的特殊性

①指针变量也是一种变量。②指针变量只不过是一种特殊的变量,其特殊性表现在类型和值上。③指针变量的类型是指针所指向的变量的类型。④指针变量的值是某个变量在内存中的地址。指针变量的特殊性①指针变量也是一种变量。15指针变量使用技巧

指针变量的使用原则:先赋初值(地址),再使用。

理由:安全使用指针变量的方法:对暂时不使用的指针,可先定义成空指针。即将其赋值为NULL。使用未经赋值的(浮游)指针危害很大。返回指针变量使用技巧指针变量的使用原则:使用未经赋值的(浮游16与指针变量有关的运算符与指针变量有关的运算符有两个:&和*。

取地址运算符(&)单目运算符,右结合。

取内容运算符(*),也叫指针运算符单目运算符,右结合。

作用:用来表示指针变量所指向的变量的内容。与指针变量有关的运算符与指针变量有关的运算符有两个:&和*17指针变量引用举例问:下面程序的运行结果是什么?#include"stdio.h"voidmain(){inta,b;int*p;a=123;p=&a;b=*p;*p=-200;printf("a=%d,b=%d\n",a,b);p=&b;printf(“%d,%d\n",b,*p);}程序运行结果a=-200,b=123123,123运行程序(3_1)思考①p的指向;②第2个printf中的访问方式指针变量引用举例问:下面程序的运行结果是什么?程序运行结果18指针变量的运算除了&和*两种运算之外,指针变量还可以进行赋值运算、加减算术运算和关系运算。指针变量的运算除了&和*两种运算之外,指针变量还可以进行赋19指针变量的赋值运算把一个指针变量的值赋予指向相同类型变量的另一个指针变量。inta,*pa=&a,*pb;pb=pa;把数组的首地址赋予同类型的指针变量。inta[5],*pa;pa=a;或pa=&a[0];把字符串的首地址赋予指向字符类型的指针变量。char*pc;pc="Iamastudent!";也可用初始化赋值的方法写为:char*pc="Iamastudent!";不表示把整个字符串装入指针变量,只是把字符串的首地址装入指针变量。回顾字符数组的赋值!指针变量的赋值运算把一个指针变量的值赋予指向相同类型变量的20对于指向数组的指针变量,可以加上(或减去)一个整数n。设pa是指向数组a的指针变量,则pa+n、pa-n、pa++、++pa、pa--、--pa运算都是合法的。举例inta[10],*pa;pa=a;pa=pa+2;指针变量的加减运算1pa?运行程序(3_2)看源程序(3_2)对于指向数组的指针变量,可以加上(或减去)一个整数n。指针21指针变量的加减运算2指向同一数组的两个指针变量,可以进行减法运算。(两指针变量相减)如果两指针变量指向同一个数组,则相减的结果是两个指针之间相差的元素个数。

例如在右图中,p1指向a[1],p2指向a[5],则p2-p1=?注意:p1+p2无任何实际意义。p1p24运行程序(3_3)看源程序(3_3)指针变量的加减运算2指向同一数组的两个指针变量,可以进行减22两指针变量相减的应用【例6-2】求字符串的长度,要求不用strlen库函数。源程序#include"stdio.h"voidmain(){char*s="CProgram!";char*p=s;intlen;while(*p!='\0')p++;len=p-s;printf("该字符串的长度为%d。\n",len);}程序运行结果该字符串的长度为9。运行程序(3_4)两指针变量相减的应用【例6-2】求字符串的长度,要求不用st23指针变量的关系运算

指向同一数组的两指针变量可以进行关系运算,表示它们所指数组元素的地址之间的大小关系。例如:右图中,表达式“p2>p1”的值为?任何类型的指针变量还可以与NULL进行比较。例如:设p为指针变量,“p==NULL”为真时表示p是空指针,它不指向任何变量;“p!=NULL”为真时表示p不是空指针。

p1p2真指针变量的关系运算指向同一数组的两指针变量可以进行关系运算24指针变量关系运算的应用【例】利用指针变量实现输出数组元素。源程序#include"stdio.h"voidmain(){inta[5]={1,2,3,4,5};int*p,*end;p=a;end=a+5;while(p<end){printf(“%d”,*p);p++;}}运行程序(3_5)返回指针变量关系运算的应用【例】利用指针变量实现输出数组元素。运25回顾思考两个问题①上学期学过哪些变量?②作为函数参数时,采用什么方式传递数据?看源程序(3_6)举例回顾思考两个问题看源程序(3_6)举例26函数参数传递规则总结

C语言的函数参数传递规则——单向值传递

就“值”而言,有两种:

传递数值——修改形参,不会影响到实参传递地址——通过形参可以访问实参函数参数传递规则总结C语言的函数参数传递规则27指针变量作为函数的参数

指针变量作函数参数

传递的值:地址特点:可以改变实参指针变量所指向的变量的值。

好处:可以返回多个值指针变量作为函数的参数指针变量作函数参数28指针变量作函数参数举例1【例6-3】编写程序,完成一个学生两门课程成绩的输入和输出。要求用两个函数input和output分别实现成绩的输入和输出。

分析⑴假定两门课程成绩存放在变量math和english中,在main函数中定义如下:intmath,english;⑵这两门课程成绩的输入要求在函数input中完成,而输出又要在函数output中进行,所以,调用完input函数后必须将两门课程成绩返回到主函数,再以参数的形式传递给output函数。⑶因此,input函数必须以指针变量作为函数参数,以便能修改主函数中变量math和english的值。思考:output函数的参数定义成什么形式?

运行程序(3_7)看源程序(3_7)源程序指针变量作函数参数举例1【例6-3】编写程序,完成一个学生两29指针变量作函数参数举例2【例6-4】编写程序,输入a和b两个整数,处理后使a中存放两者较小的那一个,b中存放两者较大的那一个,最后按a、b的顺序输出。要求:用函数实现两个数的交换。分析当输入数据后,a的值比b大,则需要交换它们的值。流程图源程序运行程序(3_8)看源程序(3_8)思考:正确吗?为什么?

指针变量作函数参数举例2【例6-4】编写程序,输入a和b两个30指针变量作函数参数举例2【例6-4】编写程序,输入a和b两个整数,处理后使a中存放两者较小的那一个,b中存放两者较大的那一个,最后按a、b的顺序输出。要求:用函数实现两个数的交换。再分析用函数swap实现交换两个整数的值,两个整数以参数的形式由main函数传递给swap函数。因为交换完以后还要把值返回给main函数,所以,以指针变量作为swap函数的参数。指针变量作函数参数举例2【例6-4】编写程序,输入a和b两个31指针变量作函数参数举例2【例6-4】编写程序,输入a和b两个整数,处理后使a中存放两者较小的那一个,b中存放两者较大的那一个,最后按a、b的顺序输出。要求:用函数实现两个数的交换。流程图源程序运行程序(3_9)看源程序(3_9)指针变量作函数参数举例2【例6-4】编写程序,输入a和b两个32swap函数总结voidswap(int*p1,int*p2){inttemp;temp=*p1;*p1=*p2;*p2=temp;}voidswap(int*p1,int*p2){int*temp;temp=p1;p1=p2;p2=temp;}voidswap(intp1,intp2){inttemp;temp=p1;p1=p2;p2=temp;}正确错误这种方法能实现题目要求吗?为什么?

运行程序(3_10)看源程序(3_10)swap函数总结voidswap(int*p1,in33本次课总结指针和指针变量的概念指针变量的定义和赋值

指针变量的运算指针变量作为函数参数的用法本次课总结指针和指针变量的概念34下课ThankYou!TheEnd.下课ThankYou!TheEnd.35同学们,加油噢!同学们,加油噢!36教学主题指针变量的定义和运算、指针变量作函数参数教学目标通过本次课的学习,使学生掌握指针的概念、指针变量的概念和定义方法、指针变量的运算、以及指针变量作为函数参数的用法。教学重点1、指针变量的定义、赋值2、指针变量的运算3、指针变量作为函数参数的用法教学难点1、指针和指针变量的区别2、指针变量作为函数参数的实质及效果教案教学主题指针变量的定义和运算、指针变量作函数参数教学目标37主要内容

指针和指针变量的概念

指针变量的定义和赋值

指针变量的运算

指针变量作为函数的参数主要内容指针和指针变量的概念38为什么引入指针

指针是C语言的特色、精华程序设计时应用指针的好处①支持动态分配内存②能有效而方便地使用数组(包括字符串)③可以在函数调用时返回多个值为什么引入指针指针是C语言的特色、精华39举例在程序中,有如下语句。问:内存中会如何变化?intx,y;x=12;y=20;1220内存单元的编号,叫地址&x&y举例在程序中,有如下语句。问:内存中会如何变化?1220内40内存地址在计算机中,所有的数据都是存放在存储器中的。一般把存储器中的一个字节称为一个内存单元。为了正确地访问这些内存单元,必须为每个内存单元编上号。根据编号就可以准确地找到该内存单元。内存单元的编号也叫做内存地址。内存地址在计算机中,所有的数据都是存放在存储器中的。41程序中一个变量包含了两个概念:①变量在内存中的地址②存放在该地址中的内容注意变量的地址是由系统分配的,在程序中只可使用,不能修改。内存单元的地址和内存单元的内容内存单元的地址内存单元的内容程序中一个变量包含了两个概念:内存单元的地址和内存单元的内42指针和指针变量的定义C语言中,将地址形象化地称为“指针”。意思是通过它可以找到以它为地址的内存单元。一个变量的地址称为该变量的指针。即:指针就是内存地址。如果一个变量专门存放另一个变量的地址(即指针),则称为指针变量。问:指针、指针变量是一回事吗?指针和指针变量的定义C语言中,将地址形象化地称为“指针”。43指针变量举例在图6-2中,变量x占用了20A0起的2个内存单元,其内容(值)为12。设有指针变量P,内容为20A0。这种情况我们称为P指向变量x,或称P是指向变量x的指针变量。返回指针变量举例在图6-2中,变量x占用了20A0起的2个内存44指针变量的定义定义指针变量时要包括三个内容:①指针变量类型说明,即标明变量为一个指针变量。②指针变量名。③指针变量所指向的变量的数据类型。其一般形式为:

类型标识符*指针变量名;标明这是一个指针变量变量名本指针变量所指向的变量的数据类型指针变量的定义定义指针变量时要包括三个内容:标明这是一个指45定义指针变量举例针对图6-2,应该如何定义x和p?intx;int*p;表示p是一个指针变量,它指向某个整型变量。如何给这两个变量赋值?x=12;

p呢?定义指针变量举例针对图6-2,应该如何定义x和p?46指针变量的赋值指针变量同普通变量一样,使用之前不仅要定义,而且必须赋予具体的值。给指针变量赋值只能赋予地址,不能赋予任何其它数据。C语言中提供了地址运算符&来表示变量的地址。其一般形式为:&变量名例如:&a变示变量a的地址。指针变量的赋值指针变量同普通变量一样,使用之前不仅要定义,而47指针变量赋值举例针对图6-2,有如下语句:intx;int*p;

x=12;如何给p变量赋值?

p=&x;如何在定义的同时给变量赋值?

intx=12;int*p=&x;在用之前,x已定义指针变量赋值举例针对图6-2,有如下语句:在用之前,x已定48给指针变量赋值时的注意点可以让指针变量不指向任何变量。int*p;p=NULL;(NULL在stdio.h中有定义)通常不允许直接把一个数值赋给指针变量。int*p;p=1000;被赋值的指针变量前不能再加“*”说明符。inta,*p;*p=&a;一个指针变量只能指向同类型的变量。floatb;int*p;p=&b;错误的用法错误的用法错误的用法给指针变量赋值时的注意点可以让指针变量不指向任何变量。错误49指针变量的特殊性

①指针变量也是一种变量。②指针变量只不过是一种特殊的变量,其特殊性表现在类型和值上。③指针变量的类型是指针所指向的变量的类型。④指针变量的值是某个变量在内存中的地址。指针变量的特殊性①指针变量也是一种变量。50指针变量使用技巧

指针变量的使用原则:先赋初值(地址),再使用。

理由:安全使用指针变量的方法:对暂时不使用的指针,可先定义成空指针。即将其赋值为NULL。使用未经赋值的(浮游)指针危害很大。返回指针变量使用技巧指针变量的使用原则:使用未经赋值的(浮游51与指针变量有关的运算符与指针变量有关的运算符有两个:&和*。

取地址运算符(&)单目运算符,右结合。

取内容运算符(*),也叫指针运算符单目运算符,右结合。

作用:用来表示指针变量所指向的变量的内容。与指针变量有关的运算符与指针变量有关的运算符有两个:&和*52指针变量引用举例问:下面程序的运行结果是什么?#include"stdio.h"voidmain(){inta,b;int*p;a=123;p=&a;b=*p;*p=-200;printf("a=%d,b=%d\n",a,b);p=&b;printf(“%d,%d\n",b,*p);}程序运行结果a=-200,b=123123,123运行程序(3_1)思考①p的指向;②第2个printf中的访问方式指针变量引用举例问:下面程序的运行结果是什么?程序运行结果53指针变量的运算除了&和*两种运算之外,指针变量还可以进行赋值运算、加减算术运算和关系运算。指针变量的运算除了&和*两种运算之外,指针变量还可以进行赋54指针变量的赋值运算把一个指针变量的值赋予指向相同类型变量的另一个指针变量。inta,*pa=&a,*pb;pb=pa;把数组的首地址赋予同类型的指针变量。inta[5],*pa;pa=a;或pa=&a[0];把字符串的首地址赋予指向字符类型的指针变量。char*pc;pc="Iamastudent!";也可用初始化赋值的方法写为:char*pc="Iamastudent!";不表示把整个字符串装入指针变量,只是把字符串的首地址装入指针变量。回顾字符数组的赋值!指针变量的赋值运算把一个指针变量的值赋予指向相同类型变量的55对于指向数组的指针变量,可以加上(或减去)一个整数n。设pa是指向数组a的指针变量,则pa+n、pa-n、pa++、++pa、pa--、--pa运算都是合法的。举例inta[10],*pa;pa=a;pa=pa+2;指针变量的加减运算1pa?运行程序(3_2)看源程序(3_2)对于指向数组的指针变量,可以加上(或减去)一个整数n。指针56指针变量的加减运算2指向同一数组的两个指针变量,可以进行减法运算。(两指针变量相减)如果两指针变量指向同一个数组,则相减的结果是两个指针之间相差的元素个数。

例如在右图中,p1指向a[1],p2指向a[5],则p2-p1=?注意:p1+p2无任何实际意义。p1p24运行程序(3_3)看源程序(3_3)指针变量的加减运算2指向同一数组的两个指针变量,可以进行减57两指针变量相减的应用【例6-2】求字符串的长度,要求不用strlen库函数。源程序#include"stdio.h"voidmain(){char*s="CProgram!";char*p=s;intlen;while(*p!='\0')p++;len=p-s;printf("该字符串的长度为%d。\n",len);}程序运行结果该字符串的长度为9。运行程序(3_4)两指针变量相减的应用【例6-2】求字符串的长度,要求不用st58指针变量的关系运算

指向同一数组的两指针变量可以进行关系运算,表示它们所指数组元素的地址之间的大小关系。例如:右图中,表达式“p2>p1”的值为?任何类型的指针变量还可以与NULL进行比较。例如:设p为指针变量,“p==NULL”为真时表示p是空指针,它不指向任何变量;“p!=NULL”为真时表示p不是空指针。

p1p2真指针变量的关系运算指向同一数组的两指针变量可以进行关系运算59指针变量关系运算的应用【例】利用指针变量实现输出数组元素。源程序#include"stdio.h"voidmain(){inta[5]={1,2,3,4,5};int*p,*end;p=a;end=a+5;while(p<end){printf(“%d”,*p);p++;}}运行程序(3_5)返回指针变量关系运算的应用【例】利用指针变量实现输出数组元素。运60回顾思考两个问题①上学期学过哪些变量?②作为函数参数时,采用什么方式传递数据?看源程序(3_6)举例回顾思考两个问题看源程序(3_6)举例61函数参数传递规则总结

C语言的函数参数传递规则——单向值传递

就“值”而言,有两种:

传递数值——修改形参,不会影响到实参传递地址——通过形参可以访问实参函数参数传递规则总结C语言的函数参数传递规则62指针变量作为函数的参数

指针变量作函数参数

传递的值:地址特点:可以改变实参指针变量所指向的变量的值。

好处:可以返回多个值指针变量作为函数的参数指针变量作函数参数63指针变量作函数参数举例1【例6-3】编写程序,完成一个学生两门课程成绩的输入和输出。要求用两个函数input和output分别实现成绩的输入和输出。

分析⑴假定两门课程成绩存放在变量math和english中,在main函数中定义如下:intmath,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论