第五章 指针
【教学目标】
掌握指针的概念;
掌握指针对变量、数组的引用方法;
掌握指针数组、行指针的应用;
了解二级指针的概念。
【教学内容】
变量的指针;
数组的指针;
指针数组、行指针;
指向指针的指针。
【教学重点和难点】
使用指针引用变量、数组;
指针数组、行指针;
数组名是地址常量;
通过对数组概念的理解,灵活利用指针引用各种数组的元素和字符串。
【问题的提出】
当需要引用一个具有很多元素的一个数组的值、或多维字符数组描述的各字符串或元素,
能否有更简洁方便的方法;根据解决问题的实际需要,是否能动态的分配所需存储空间而不
浪费;计算机所处理的信息都要通过内存进行交换,是否可以通过内存地址直接的对存放于
内存的数据进行操作,以便提高处理效率;在计算机中,为了提高存储效率,充分利用有限
的内存空间,是否可以将连续的数据分散保存而又能方便地描述出各存储数据的关系等。在
C 语言中,引入了指针概念的变量,可以方便的解决以上问题。
【教学要点】
1. 指针变量的运算
【例5.1 】指针变量的取值运算
利用指针变量,从键盘上输入两个整型值,将其进行交换并输出到屏幕。
#include"stdio.h"
main( )
{ int a,b;
int *pa=&a,*pb=&b; /* 定义指针变量pa 和pb ,分别指向变量a 和b ,即pa 和pb 分别表
示变量a 和b 的地址 */
printf("Please input A=");
scanf("%d",pa); /* 给指针变量pa 指向的变量a 赋值 */
printf("Please input B=");
scanf("%d",pb); /* 给指针变量pb 指向的变量b 赋值 */
*pa+=*pb; /* 将地址pa 和pb 中的值累加,再存入地址pa 中,即变量a 的值是原a、b
值之和 */
*pb=*pa-*pb;/* 将地址pa 中的值减去地址pb 中的值并存入地址pb 中,实现b=(a+b)-b ,
即b 的值是原a 的值 */
*pa=*pa-*pb;/* 将地址pa 中的值减去地址pb 中的值并存入地址pa 中,实现a=(a+b)-a,
即a 的值是原b 的值 */
printf("Result \n");
printf("A=%d,B=%d",*pa,*pb); /* 输出交换后的变量a 和b 的值 */
getch( );
}
【例5.2 】指针变量的算术运算地址移动或位置差
利用指针变量,将字符串在自身内部倒序交换后再输出。
#include"stdio.h"
#include"string.h"
main( )
{ char a[128],*first,*end,ch; /* 定义数组a、指针变量first 和end 及字符变量ch */
int n,i;
printf("Please input a character string:\n");
gets(a); /* 为数组a 赋初值,即输入串的字符 */
n=strlen(a); /* 测量串a 的长度 */
first=a; /* 为指针变量first 赋初值为a,即指针first 指向字符串首地址 */
end=&a[n-1]; /*指针变量end 赋初值为&a[n-1],即指针end 指向字符串末尾元素*/
for( ; first
/* 将首、尾元素的值进行交换,再变换首、尾位置,直到首、尾相接时结束交换 */
{
ch=*first;
*first=*end;
*end=ch;