一、实验目的
(一)进一步理解指针的概念,掌握其在数组和字符串中的应用。
(二)学会使用函数的指针和指向函数的指针变量。
(三)了解指向指针的指针的概念及其使用方法。
二、预习要求
(一)字符、字符串和字符数组的关系与表示方法;
(二)函数指针;
三、实验内容
1、有如下程序段:
int a=10,b=1,*p; /*此处的*表示定义指针变量,而非间接运算符*/
p=&a;
a=*p+b; /*此处的*表示间接运算符*/
执行该程序段后,a的值为 11 。
1. #include "stdio.h" 2. void main() 3. { 4. int a=10,b=1,*p; 5. p=&a; 6. a=*p+b; 7. printf("a的值为:%d",a); 8. }
2、写出下列程序的运行结果:
main()
{ int a[]={1,2,3};
int *p,k;
p=a; /*将数组a的首地址送给指针变量p*/
for(k=0;k<3;k++)
printf(“%d,%d,%d,%d\n”,a[k],p[k],*(p+k),*(a+k));
}
注:通过该题,希望学生掌握数组元素与指向数组的指针的不同。a[k]表示数组中下标为k的元素。a[k]、p[k]、*(p+k)、*(a+k)都表示a[k];前两种是下标表示法,后两种是指针表示法。而a+k表示数组中第k个元素的地址。
1. #include "stdio.h" 2. void main() 3. { 4. int a[3]={1,2,3}; 5. int *p,k; 6. p=a; 7. for(k=0;k<3;k++) 8. printf("%d %d %d %d\n",a[k],p[k],*(p+k),*(a+k)); 9. }
3、以下程序是用指针变量输出a数组中的10个元素。
1. #include "stdio.h" 2. void main() 3. { 4. int a[10]; 5. int *p,k; 6. p=a; 7. printf("请输入十个数值:"); 8. for(k=0;k<10;k++) 9. scanf("%d",p++); 10. p=a; 11. for(k=0;k<10;k++,p++) 12. printf("%d ",*p); 13. printf("\n"); 14. }
4.下面程序的功能是输出a数组中的10个元素。
1. #include "stdio.h" 2. void main() 3. { 4. int a[10]; 5. int *p,k; 6. p=a; 7. for(k=0;k<10;k++) 8. { 9. *p=k; 10. p++; 11. } 12. p=a; 13. for(k=0;k<10;k++,p++) 14. printf("%d ",*p); 15. }
5、编写程序实现如下功能:通过键盘,用指针输入10个元素的值,再通过指针计算各元素的平均值,输出平均值。
1. #include "stdio.h" 2. void main() 3. { 4. int as(int *p,int n); 5. int a[10]={0,1,2,3,4,5,6,7,8,9}; 6. as(a,10); 7. } 8. int as(int *p,int n) 9. { 10. float i,aver,sum=0; 11. for(i=0;i<10;i++,p++) 12. { 13. sum=sum+*p; 14. } 15. aver=sum/10; 16. printf("输出平均值为:%f",aver); 17. }
四、实验注意事项
注意数组的指针与数据元素值之间的关系。