C语言实验报告八
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
南京信息工程大学实验(实习)报告
实验(实习)名称指针及其应用日期2019.5.30 得分指导老师瞿治国
系专业年级2018 级班次班姓名学号
一、实验目的
1.实验目的
(1) 掌握变量的指针及其基本用法。
(2) 掌握一维数组的指针及其基本用法。
(3) 掌握指针变量作为函数的参数时,参数的传递过程及其用法。
二、实验内容
(1) 运行以下程序,并从中了解变量的指针和指针变量的概念。
# include
int main()
{
int a=5,b=5,*p;
p=&a;
printf("%d ,%ud\n",a,p);
*p=8;
printf("%d ,%ud\n",a,p);
p=&b;
printf("%d ,%ud\n",a,p);
b=10;
printf("%d ,%ud\n",a,p);
return 0;
}
(2) 运行以下程序,观察&a[0]、&a[i]和p的变化,然后回答以下问题:
①程序的功能是什么?
②在开始进入循环体之前,p指向谁?
③循环每增加一次,p的值(地址)增加多少?它指向谁?
④退出循环后,p指向谁?
⑤你是否初步掌握了通过指针变量引用数组元素的方法?
# include
int main()
{
int i,*p,s=0,a[5]={5,6,7,8,9};
p=a;
for(i=0;i<5;i++,p++)
s+=*p;
printf("\n s=%d",s);
return 0;
}
(3) 编写函数,将n个数按原来的顺序的逆序排列(要求用指针实现),然后编写主函数完成:
①输入10个数。
②调用此函数进行重排。
③输出重排后的结果。
三、实验步骤和实验结果
第一个程序输入后
第二个程序输入后
可以知道①程序的功能是计算数组里所有元素的和
②在开始进入循环之前p指向a数组的首地址
③循环每增加一次,p的值增加数组内一个元素字节长度,且指向下一个数组元素
④退出循环后,p指向最后一个元素
⑤已初步了解掌握通过指针变量引用数组元素的方法
第三个程序写出来:
#include
#define N 10
void inv(int *,int);
int main()
{
int i,a[N];
for(i=0;i scanf("%d",&a[i]); printf("逆置前:\n"); for(i=0;i printf(" %d",a[i]); printf("\n"); inv(a,N); printf("逆置后:\n"); for(i=0;i printf(" %d",a[i]); return 0; } void inv(int *x,int n) { int *p,*q,t; p=x; q=x+n-1; while(p { t=*p; *p=*q; *q=t; p++; q--; } } 运行后 四、分析与讨论 数据的存储地址是指针,它的值是内存单元的地址编号,描述了数据在计算机内存中存储的形式,反映了计算机处理信息的基本过程;利用数组可以实现的功能,指针也可以做到,甚至更方便。 五、实验小结 我们可以认为数组与指针有着一定的区别和联系。数组名是一个静态的指针,而指针变量中的指针是一个动态的量,二者之间关系紧密,有时可以相互替代。