当前位置:首页 > 第10讲 - 第十章指针
第10讲 指针
一、授课内容
1、科目:C语言程序设计 2、授课内容:第10章 指针 3、授课类型:讲授 4、授课时间:10学时 5、主讲教师: 肖飞 二、学目的与要求
a) 掌握指针和地址的概念以及指针变量的定义和使用 b) 掌握指针变量和数组的联系和区别 c) 掌握指针变量做函数的参数
d) 掌握二维指针、指针数组、指向函数的指针、包含多个元素的指针的区别和联系 e) 学会灵活运用指针并解决实际问题 四、教材分析
a) 教材概述:本部分内容讲述C语言中指针的概念和运用 b) 教学重点:各种类型指针的概念 c) 教学难点:如何灵活运用指针 五、教学学设想
a) 教材处理设想:示例、例题、比喻、比较
b) 教学方法设想:讲授为主,辅以常识、实际操作指导 c) 教具运用设想:电子幻灯片 六、教学过程
导入:C语言指针是一个非常重要的角色,也是C语言的精华部分: 指针的优点: 1、表示复杂的数据结构 2、动态分配内存 3、能方便的使用字符串 4、有效方便的使用数组 5、调用函数得到多于一个值 6、能直接处理内存地址 10.1 指针和指针的概念
一、数据在内存中是如何存取的
二、指针实际上上一种间接存取的方式 实例说明 例:int ,i*p; p=&i;
对i这个变量的操作有两种方法: (1) 通过变量i
(2) 通过指针变量p
指针:指针变量的值
指针变量:存放变量地址的值的变量是指针变量 10.2 变量的指针和指向变量的指针变量
变量的指针就是变量的地址,存放变量地址的变量就是指针变量,用来指向另一个变量 上例中的i和*p实际上指向同一个变量
1
一、定义一个指针变量 int i,j
int * p1 ,* p2 char * c1,*c2
基类型 * 指针变量名 p1=&i; p2=&j
在定义指针变量时要注意两点
(1) 在指针变量前加“*”表示该变量为指针变量类型,指针变量名为p1,p2 (2) 在定义指针变量时必须指明基类型 二、指针变量的引用 注意:指针变量只能存放地址,不能将一个整型变量(或其它非地址类型的数据)赋值给一个指针变量 两个有关的运算符 (1)&取地址运算符 (2)*指针运算符
例 通过指针变量访问整型变量 main( ) { int a , b;
int * p1 ,* p2; a=10;b=1; p1=&a; p2=&b;
printf(“%d,%d,%d,%d”,a,b,*p1,*p2); }
说明:
(1) 程序开头定义了两个指针变量p1和p2,但它们并未指向任何一个整型变量。 (2) 最后一行的*p1和*p2就是变量a和b,最后两个printf函数 (3) 程序中两次出现* p1 和* p2的含义不同。 关于& 和 * 的几点说明 (1)&*p1 =p1 (2)* &a=* p1
(3)(* p1 )++=a++ 例:10、2
main( ) {
int *p1,p2,*p,a,b;
scanf(“%d,%d”,&a,&b); p1=&a;p2=&b; if(a
{ p=p1;p1=p2;p2=p; } printf(“%d,%d”,a,b);
printf(“%d,%d”,*p1,*p2); }.
2
三、多级指针 指针不但可以指向基本类型的变量,还可以指向指针变量,这种指向指针型数据的指针变量称为指针的指针,或称多级指针。 二维指针的定义形式: 数据类型 **指针变量 例如: int a , *p ,* *pp; a = 22; p = &a; pp = &p; 假设a的地址位4000,指针p的地址位4100,二维指针pp的地址为4800,关系图如下: pp(4800) p(4100) a(4000) &p = 4100 &a = 4000 22
思考并提问:下列的含义:a &a *p p &p * * pp *pp 同理还可以定义三维指针:如:int * * * ppp; ppp = &pp; 二级指针的使用:例: #include
四、指针变量作为函数参数 例10、3 swap(int *p1,int *p2)
{
int temp; temp=*p1; * p1= *p2; *p2=*p1; }
main( ) {
int a,b;
int * p1,* p2;
scanf(“%d,%d”,&a,&b); p1=&a,p2=&b;
if (a
swap(int x , int y)
pp &pp 3
{ int temp; temp=x; x=y; y=temp;
} 分析能不能改变主函数里实参a,b 的值
swap(int *p1,int *p2) { int * p; p=p1; p1=p2; p2=p; }
main( ) { int a,b;
int * p1 ,*p2; a=5;b=9;
p1=&a; p2=&b; if a
10.3 数组的指针和指向数组的指针变量
数组的指针:数组的起始地址 数组元素的指针:数组元素的地址 一、指向数组元素的指针
int a[10] int * p; p=&a[0]; p=a;
画出结构图并根据下面描述给出详尽的说明。 二、通过指针引用数组元素
如果p已指向数组的某一个元素,p+1表示指向下一个元素 如果p的初值为&a[0]
(1) p+i和a+i表示a[i]的地址
(2) *(p+i)或*(a+i)是p+i的地址或a+i的地址所指向的值
(3) 指向数组的指针元素也可以带下标,如p[i]与* (p+i)等价 见例10.5输出数组中的全部元素
(1) 下标法:
main( ) {
int a[10]; int i;
for(i=0;i<10;i++)
scanf(“%d”,&a[i]); for(i=0;i<10;i++)
4
共分享92篇相关文档