资源描述:
《指针和函数ppt课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第五章指针和函数5.1指针的概念、指针变量的定义和引用5.2指针变量作函数的参数5.3函数的指针与函数调用5.4指向函数的指针变量作函数参数5.5返回指针值的函数5.1指针的概念、指针变量的定义和引用变量和地址指针变量的概念指针变量的定义指针变量的初始化指针变量的引用变量和地址地址:一个变量名代表内存中的一个存储单元,每个存储单元都有一个编号,这就是“地址”。房间—变量名房客—变量值房间号—地址inti,j;charch;floatf;i=5;j=3;ch=’H’;f=3.14;53‘H’3.14ijchf……………………20002002200420052009200
2、12003200620072008编译或函数调用时为变量分配内存单元内存中每个字节有一个编号——地址变量是对程序中数据存储空间的抽象指针变量的概念…...…...2000200420062005整型变量i20变量ptr200120022003指针:一个变量的地址。指针变量:专门存放另一变量地址的变量。2000指针指针变量变量的内容变量的地址指针变量变量变量地址(指针)变量值指向地址存入指针变量指针变量的定义[存储类型]数据类型*指针变量名;inti,j,*pi,*pj;floatf;float*pf;合法标识符指针变量本身的存储类型表示定义指针变量不是‘*’运算符注:
3、(1)int*p1,*p2;指针变量名是p1,p2,不是*p1,*p2。(2)指针变量只能指向定义时所规定类型的变量。(3)指针变量定义后,变量值不确定,应用前必须先赋值。指针的目标变量的数据类型指针变量的初始化赋给指针变量,不是赋给目标变量例inti;int*p=&i;变量必须已说明过类型应一致例int*p=&i;inti;()例inti;int*p=&i;int*q=p;用已初始化指针变量作初值例main(){intx;staticint*p=&x;..............}()不能用auto变量的地址去初始化static型指针一般形式:[存储类型]数据类
4、型*指针名=初始地址值;指针变量的引用&:取变量的地址。单目运算符、优先级为2、右结合性。设有程序段代码:inti,*ptr;i=20;ptr=&i;ptr和i的关系如图指针变量的引用*:取指针变量所指地址中的内容,与&为互逆运算。单目运算符、优先级为2、右结合性。有程序段:intx=20,y,*ptr;ptr=&x;y=*ptr;该段程序的意思是:定义整型变量x(初值为20)和y以及指向整型的指针变量ptr。将变量x的地址赋给指针变量ptr,然后以指针变量ptr的值为内存单元地址,将该单元的数据取出赋给变量y。即相当于执行语句y=x;注意:乘法运算符号和指针操作符号
5、*形式上相同,位运算符号与(&)与指针运算符号&也相同。但是这些运算符号之间没有任何关系,编译器根据他们在程序中所处的位置来解释他们,在使用的时候要注意它们使用的场合。例5-1#include"stdio.h"main(){intnum_int=12,*p_int;/*定义一个指向int型数据的指针变量p_int*/floatnum_f=3.14,*p_f;/*定义一个指向float型数据的指针变量p_f*/charnum_ch='p',*p_ch;/*定义一个指向char型数据的指针变量ph*/p_int=&num_int;/*取变量num_int的地址,赋值给p_
6、int*/p_f=&num_f;/*取变量num_f的地址,赋值给p_f*/p_ch=&num_ch;/*取变量num_ch的地址,赋值给p_ch*/printf("num_int=%d,*p_int=%d",num_int,*p_int);printf("num_f=%4.2f,*p_f=%4.2f",num_f,*p_f);printf("num_ch=%c,*p_ch=%c",num_ch,*p_ch);}[程序演示]程序运行结果:num_int=12,*p_int=12num_f=3.14,*p_f=3.14num_ch=p,*p_ch=p程序说明:(
7、1)头三行的变量定义语句──指针变量的定义注意:此时的指针变量p_int、p_f、p_ch,并未指向某个具体的变量(称指针是悬空的)。使用悬空指针很容易破坏系统,导致系统瘫痪。(2)中间三行的赋值语句──取地址运算(&)取地址运算的格式:&变量例如,&num_int、&num_f、&num_ch的结果,分别为变量num_int、num_f、num_ch的地址。注意:指针变量只能存放指针(地址),且只能是相同类型变量的地址。例如,指针变量p_int、p_f、p_ch,只能分别接收int型、float型、char型变量的地址,否则出错。(3)后三行的输出