资源描述:
《指针是C语言的重要概念和特色使用指针》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、第9章指针指针是C语言的重要概念和特色。使用指针,可以使程序更加简洁、紧凑、高效。教学目的:掌握指针的概念,指针变量的概念、定义与应用,指向1维数组(字符串)的指针变量应用,指针数组与带参主函数;了解返回指针值的函数等。7/17/20211教学内容:9.1指针和指针变量的概念9.2*指针变量的定义与应用9.3*1维数组的指针与列指针变量9.4字符串的指针和指向字符串的指针变量9.5指针数组与主函数main()的参数9.6返回指针值的函数本章要点本章作业与上机实践7/17/202129.1*指针和指针变量的概念1.内存地址──内存中存储单元的编号。(1)内存中拥有大量的存储
2、单元(1字节)。为了方便管理,必须为每一个存储单元编号——存储单元的“地址”。每个存储单元,都有一个惟一的地址。(2)在地址所标识的存储单元中,存放数据。类比:住址(宿舍编号)与人。7/17/202132.变量地址──系统分配给变量的内存单元的起始地址。假设有如下程序:……voidmain(){intnum;scanf("%d",&num);printf("num=%d",num);}且系统分配给变量num的2个存储单元为3000和3001,则起始地址3000就是变量num在内存中的地址。7/17/202143.变量值的存取──通过变量在内存中的地址进行系统存取变量n
3、um的方式可以有两种:…………3……3000num(1)直接访问──直接利用变量的地址进行存取用变量名num查找符号表(编译程序建立),取出其起始地址3000;然后访问num(将数据送入/取出),如右图所示。7/17/20215(2)间接访问──通过另一变量访问num的值C语言规定:在程序中,可以定义一种特殊的变量(称为指针变量),用来存放其它变量的地址。假设:定义了1个指针变量num_p,它被分配到4000、4001单元,通过赋值语句“num_p=#”获得num的地址3000,如下图所示:7/17/20216通过指针变量num_p,存取变量num的过程如下:首先
4、找到指针变量num_p的地址(4000),取出其值3000(num的地址);然后存取num的值(3)。……3000……3……30004000numnum_p7/17/20217(3)两种访问方式的比较类比:某人甲(系统)找某人乙(变量)办事①甲直接去找乙办事(即直接访问)。②甲委托丙(指针变量)去找乙办事。7/17/202184.指针与指针变量(1)指针──即地址,变量的地址称为该变量的指针。(2)指针变量──专门用于存储其它变量地址的变量。例如,变量num_p是一个指针变量,其值是变量num的地址。[返回]7/17/202199.2*指针变量的定义与应用9.2.1指针变
5、量的定义与相关运算[案例9.1]指针变量的定义与相关运算示例。#include"stdio.h"#include"conio.h"voidmain(){intnum_int=12,*p_int;floatnum_f=3.14,*p_f;charnum_ch=’p’,*p_ch;p_int=&num_int;p_f=&num_f;p_ch=&num_ch;指向int型数据的指针变量p_int使p_int指向变量num_int7/17/202110printf(“num_int=%d,*p_int=%d”,num_int,*p_int);printf(“num_f=%4.
6、2f,*p_f=%4.2f”,num_f,*p_f);printf(“num_ch=%c,*p_ch=%c”,num_ch,*p_ch);getch();}程序运行结果:num_int=12,*p_int=12num_f=3.14,*p_f=3.14num_ch=p,*p_ch=p访问p_int所指向的变量7/17/2021111、指针变量的定义数据类型*指针变量[,*指针变量2……];例如,[案例9.1]中的语句:intnum_int=12,*p_int;特别说明:定义而未初始化的指针变量(例如p_int)是悬空的。使用悬空指针变量,很容易破坏系统,导致系统瘫
7、痪。指针变量的定义标识符7/17/2021122、取地址运算:&变量名例如,[案例9.1]中的&num_int、&num_f、&num_ch的结果,分别为对应变量的地址(num_int、num_f、num_ch)。注意:指针变量只能存放相同数据类型变量的地址。例如,[案例9.1]中的指针变量p_int、p_f、p_ch,只能接收int型、float型、char型变量的地址,否则出错。7/17/2021133、指针运算:*指针变量名*p_int、*p_f、*p_ch,分别输出各自所指向的变量num_int、num_f、num_c