实验八 指针程序设计
【实验目的】
1.掌握变量的指针及其基本用法。 2.掌握一维数组的指针及其基本用法。
3.掌握指针变量作为函数的参数时,参数的传递过程及其用法。
【上机实习指导】
1.对以下程序进行单步运行,并从中了解变量的指针和指针变量的概念。 # include “stdio.h” void main()
{ int a=5,b=5,*p; p=&a;
*p=8; p=&b; b=10; }
按以下步骤操作:
①输入程序后,连续按三次F8,使绿条停留在P=&a诵句行上。
②用Ctrl一F7操作分别将a,b,&a,&b,p及*p显示出来。
③查看观察窗口中的内容,可发现此时a、b己有确定的地址(&a和&b)和确定的值,而p还没荷确定的值(此时语句p=&a还未执行),即p还没有明确的指向,因而它所指向的内存单元(*p)中的内容也是不确定的。
④按F8往下执行一步后再查看观察窗中的内容,可发现p已有确定的值,它与&a的值一致,说明p中存放了变量a的地址,也就是说p是指向变量a的指针变量。同时可发现,*p的内容与a的内容一致,
即p所指向的内存单元中的内容就是a的内容;从而可以理解*p等效于a,表示同一内存单元。
⑤按F8往下执行一步后再查看观察窗中的内容,可发现*p和a的内容都已发生变化,从而可理解通过改变指针变量p所指向的内存单元中的内容可以间接地改变a中的内容。
⑥再按F8往下执行一步,可发现p的值己发生变化,它与&b的值一致,说明p已经是指向变量b的指针变量,它不再是指向a,*p的内容也已变为b的内容,从而可理解指针变量的指向是随时可以改变的。
⑦再按F8往下执行一步,可发现,b的值和*p的值都已发生变化,即改变b的内容就等于改变指针变量p所指向的内存单元中的内容。
2.单步运行以下程序,观察&a[0],&a[i])和P的变化,然后回答以下问题: ①程序的功能是什么?
②在开始进入循环体之前,p指向谁?
③循环每增加一次,p的值(地址)增加多少?它指向谁? ④退出循环后,p指向谁?
⑤你是否初步掌握了通过指针变搔引用数组元素的方法? # include “stdio.h” void main()
{ int i,*p,s=0,a[5]={5,6,7,8,9}; p=a;
for(i=0;i<5;i++,p++)
41
s+=*p;
printf(“\\n s=%d”,s); }
3.先分析以下程序的运行结果,然后上机验证,并通过此例掌握通过指针变量引用数组元素的各种方法。
# include “stdio.h”
void main( )
{ int i,s1=0, s2=0, s3=0, s4=0,*p,a[5]={1,2,3,4,5}; p=a;