指针的概念、定义与引用
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课题序号授课班级12综高6、7 授课课时 2 授课形式理论课
授课章节
名称
8.1 8.2
使用教具
教学目的掌握指针的概念,区别直接和间接访问方式;掌握指针的定义;
掌握&与*运算符;
教学重点&与*运算符教学难点&与*运算符
更新、补
充、删节
内容
课堂作业见学案
教学后记
课堂教学安排
教学过程主要教学内容及步骤
学生课前预习,教师检查完成情况
教师讲解,学生分小组讨论交流
本章我们学习C语言中一个重要的概念——指针。
指针也是C语言的重要特色。
使用指针,可以使程序更加简洁、紧凑、高效。
【课前预习】
1、什么是变量?变量在内存中是如何存储的?
在程序的运行过程中,值可以改变的量称为变量。
一个变量实质上是代表了内存中某个存储单元。
计算机的内存是以字节为单位的一片连续的存储空间,每一个字节都有一个编号,这个编号就称为内存地址,就像旅馆的每个房间都有一个房间号一样。
编译时,系统根据变量的类型,在内存中分配合适大小的存储空间,比如:整型分配2个字节,实型分配4个字节,字符型分配1个字节等等。
系统是根据地址对内存空间进行存取操作的,但用户只需根据变量名就可以实现对存储空间的访问。
【课堂探究】
1、访问方式
任务二、区别直接访问方式与间接访问方式
#include <stdio.h>
void main()
{
int i,j,k;
i=3;j=6;
k=i+j;
printf("i+j=%dn",k);
}
a b c
int i,j,k;系统给int变量i,j,k分别分配2字节的内存(如图a),并建立变量名到内存地址的一一对应关系。
i=3;j=6;对i,j赋值。
将3放到i对应的内存2000中,将6放到j对应的内存2002中(如图b)。
k=i+j;对k赋值。
从内存中取出i和j,相加后将结果9放到k 对应的内存2004中(如图c)。
printf("i+j=%dn",k);输出k的值。
从内存中取出k值,输出到屏幕。
这里,根据变量i,j,k对应的地址访问到他们(直接按变量的地址存取变量的值的方式)称为变量的“直接访问”方式。
如同我们知道自己的好朋友家住某市某街道某楼,直接去找他。
我们并不总是知道目标数据的地址,比如多年未联系的同学A。
我们并不知道他们的地址,但同学B却知道,我们从同学B处得到A的地址,然后去拜访A。
像这一种,需要到某个地方得到所要数据地址的访问方式称为“间接访问”方式。
C语言中也有间接访问方式。
C语言中有一种变量,专门记录变量的内存地址,通过这种变量,我们可以得知一个内存变量的存储位置,从而访问该内存变量。
如有记录地址的变量
例如:
地址为3010的存储单元内容为2000,地址为2000的存储单元内容为3;即i的值为3。
这样,我们就可以通过i_pointer来访问变
量i 。
首先从i_pointer 中取出数据2000即变量i 的内存地址,按此地址找到i ,从里面读出数据3。
内存地址2000指向变量i,我们给内存地址2000取一个新名字——指针。
指针即内存地址。
指针(地址)是一种新的数据类型,对应有指针变量。
指针变量用来保存指针(地址)数据。
上文的i_pointer 就是一个指针变量,他保存的是i 的指针(地址),形象的说,i_pointer 指向i 。
直接访问方式:
2060
间接访问方式:
2002 2060
任务三:区别指针与指针变量
指针:是地址的形象化名称 变量的地址 i 的指针(地址)是2000 (“内存地址)
指针变量:存放地址的变量 i_pointer
指针:内存地址
指针变量:用来保存指针(地址)数据
2、指针变量的定义
123.45
X
2060 123.45 X P
指针变量的定义*:是个说明符,表示这个变量是指针类型
任务四:
int *p,*q; p,q是两个指向int类型的指针
float *p,*q;
char *p,*q;
double *p,*q;
基类型不同
3、指针变量的引用
&:取地址
*:取内容区别于指针变量的定义*
(1)通过求地址运算& 获得地址值
&:把一个变量的地址赋给指针变量
例:int k=1, *p;
p=&k;
将变量k的地址赋给了p,即p指向了k。
注意:&必须放在运算对象的左边
运算对象的类型必须与指针变量的基类型相同。
(2)通过指针变量获得地址值
例:int k=1,*q,*p;
p=&k;
q=p;
p、q指向了k
p、q的基类型必须相同。
q通过指针变量p获得k的地址值。
(3)通过指针来引用一个存储单元
当指针变量中存放了一个确定的地址值时,就可以用“*”来引用相应的存储单元。
例:int k=1, *p,j;
p=&k;
j=*p;相当于j=k;
课堂作业
1、阅读程序,写出程序的运行结果
main ()
{ int a,b;
int * p1, * p2;
a = 100;
b = 10;
p1 = &a;
p2 = &b;
printf("%d,%d\n", a,b );
printf("%d,%d\n", *p1,*p2 );
}
100,10
100,10
2、若有定义:int x,*pb;则以下正确的赋值表达式是( A )
A.pb=&x;
B.pb=x;
C.*pb=&x;
D.*pb=*x;。