第十章 指 针
课题:
第十章 指针 §1-§2
教学目的:
1、了解指针与地址的概念
2、掌握指针变量的定义、初始化及指针的运算
教学重点:
教学难点:
指针变量的定义、初始化及指针的运算
指针的运算
步骤一 复习引导
指针是C语言的一个重要概念,也是C语言的一个重要特色。正确而灵活地运用它,可以有效地表示复杂的数据结构;能动态分配内存;能方便地使用字符串;有效而方便地使用数组;在调用函数时能得到多于1个的值;能直接处理内存地址等,这对设计系统软件是很必要的。
指针的概念比较复杂,使用也比较灵活,因此初学者时常会出错,务请在学习本章内容时十分小心。
?
步骤二 讲授新课
§10.1 地址和指针的概念
计算机的主存储器被分成一个个存储单元,为了区分各存储单元,要为每个存储单元编号,这个编号即地址。
例:i =3; 或 scanf(“%d”, &i);
是将3送给 i所在的空间。
例:将3送到变量I_pointer所“指向”的单元(即I所标志的单元)。
所谓“指向”,是通过地址来体现的,I_pointer中的值为2000,它是变量I 的地址,这样就在I_pointer和变量之间建立起一种联系,即通过I_pointer能知道I的地址,从而找到变量I的内存单元。因而在C语言中,将地址形象化地称为“指针”。
意思是通过它能找到以它为地址的内存单元。一个变量的地址称为该变量的“指针”。
内存单元的地址和内存单元的内容是两个不同的概念。
指针:就是地址,即内存单元的编号。
指针变量:用来存放另一变量的地址(即指针)的变量。
如:地址2000是变量 i的指针;i_pointer是指针变量,其值就是指针2000。
?
§10.2变量的指针和指向变量的指针变量
变量的指针就是变量的地址。
存放变量地址的变量是指针变量,用来指向另一个变量。
*i_pointer 表示 i_pointer 所指向的变量。
?
一、定义一个指针变量
指针变量的定义包含三个方面的内容:
⑴ 指针类型说明,即定义变量为一个指针变量
⑵ 指针变量名
⑶ 变量值(指针)所指向的变量的数据类型。
格式: 存储类型 基类型 *指针变量名;
例:int *pointer_1, *pointer_2;
float *pointer_3;
char *pointer_4;
二、指针的引用
指针变量有两个运算符:
& :取地址运算符
功能:取变量地址;单目,右结合。
* :取内容运算符(“间接访问”运算符)
功能:只能跟地址,取变量所指向单元的内容;单目,右结合。
例:&a为变量a的地址, *p 为指针变量p所指向的存储单元。
例:int a=5, *p=&a; printf ( “%d”, *p );
main(){ int a,b; int *pointer_1,*pointer_2; a=100;b=10; pointer_1=&a; /*把变量a的地址赋给pointer_1*/ pointer_2=&b; /*把变量b的地址赋给pointer_2*/ printf(“%d,%d\n”,a,b); printf(“%d,%d\n”,*pointer_1, *pointer_2);}
输出结果:100, 10 100, 10
?
评注:
1、在第3行虽然定义了两个指针变量,只是提供了两个指针变量,但并未指向任何一个整型变量。称为指针“悬空”。
2、最后一行的*pointer_1和pointer_2就是变量a和b。
3、程序中两处出现*pointer_1等,含义不同。程序第3行中的*pointer_1表示定义指针变量pointer_1。它前面的*只是表示该变量是指针变量。程序最后一行中的*pointer_1则代表变量,即pointer_1所指向的变量。
4、第5行中的pointer_1=&a 是将a的地址赋给指针变量pointer_1,而不是*pointer_1。
注意:不应写成:*pointer_1=&a;
5、从上例中可看出,*pointer_1等价于a,*pointer_2等价于b,故凡在程序中出现a的地方均可用 *pointer_1 代替。所以,若有: int x, y, *px=&x ;
则下面的运算均是正确的: y=*px+1; /*把 x 的内容加1 送变量y*/