第8章指针实验报告8

第8章 指针-课内实验挨靠【顾保磊】

中国地质大学江城学院 C语言课内实验报告8

专 业 学号 姓名 指导教师 实验名称 成绩

一、实验目的 (1)掌握指针的概念、指针变量的定义。 (2)掌握指针的运算。 (3)掌握指针与数组的关系。 (4)掌握指针与函数的关系。 (5)Y解指向函数的指针。 (6)Y解指向指针变量的指针。 二、预习内容 (1)指针变量的定义、赋值、操作(存储单元的引用、移动指针的操作、指针的比较),取地址运算符&和间接运算符+的功能及用法,数组元素的多种表示形式。 (2)指针是种特殊的变量,它具有变量的三要素(即变量名、变量值、变量类型),要注意指针的值及(基)类型。指针的值是某个变量的地址值,它的(基)类型是它所指向的变量的类型。 *:说明符,说明某一变量是指针。 &:对变量取地址。 三、实验内容 (1)先分析程序的运行结果,再上机验证。 #include int main() {int i,j,*pi,*pj; pi=&i; pj=&j; i=5; j=7; printf(\printf(\return 0; } 输出: 5 7 1245052 1245048 1245052 5 1245048 7 ①先静态分析程序运行的结果,再与上机运行的结果比较是否一致,若不一致分析产生的原因。 答:结果一致 ②程序中的pi,pj是地址值,通过两次运行程序或在不同的机器中运行程序,观察其结果是否一样,从中可得到什么结论?程序输出语句中\的作用是什么? 答:pi,pj中的地址值不变,\使输出内容到下一制表区。 (2)先分析程序的运行结果,再上机验证。 #include

1

第8章 指针-课内实验挨靠【顾保磊】 int main() {int a[]={1,2,3}; int *p,i; p=a; for(i=0;i<3;i++) printf(\return 0; } 输出: 1 1 1 1 2 2 2 2 3 3 3 3 ①先静态分析程序运行的结果,再与上机运行的结果比较是否一致,若不一致分析产生的原因,特别注意输出的格式是如何控制的。 答:静态,动态结果一致。 ②通过本题的练习,希望学生掌握数组元素与指向数组的指针是不同的。 a[i]:表示数组的下标为i的元素。a[i]←p[i] ←*(p+i) ←*(a+i)。a是数组名,表示数组首地址,(p+i)表示数组中第i个元素的地址,*(p+i)相当于a[i]。 (3)先分析程序的运行结果,再上机验证。 #include void fun(char *str,int i) {str[i]='\\0'; printf(\if(i>1) fun(str,i-1); } int main() {char str[]=\ 输出: abcd abc ab a ①先静态分析程序运行的结果,再与上机运行的结果比较是否一致,若不一致分析产生的原因。 ②main()函数调用fun函数时传递的一个是str数组首地址和一个常量值4,则要求fun函数的形参必须是什么类型?在fun函数中又调用fun函数,这种调用称为什么调用?又是如何退出调用的? 答:要求fum的形参必须是指向字符的指针和整型。fun中又调用fun是递归调用。当压入堆栈的语句都执行完才退出。 (4)输出a数组的10个元素的程序如下并指出程序问题所在。 #include int main() {int a[10]; int *p,i; p=a; for(i=0;i<10;i++) {*p=i; p++; } for(i=0;i<10;i++,p++) printf(\return 0; }

2

第8章 指针-课内实验挨靠【顾保磊】 输出: 1245120 4199001 1 4394656 4394448 2367460 1243068 2147315712 0 -2142224440 修改程序: #include int main() {int a[10]; int *p,i; p=a; for(i=0;i<10;i++) {*p=i; p++;} p=a; for(i=0;i<10;i++,p++) printf(\return 0; } 输出: 0 1 2 3 4 5 6 7 8 9 通过上机调试,输出的结果不是0~9,原因是什么?修改程序使其输出正确的结果为止 答:原因是指针用完后没复位,执行指针复位p=a;后,结果正确。 (5)以下程序的功能是:输入10个数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。将空缺处语句填写完整并调试运行。 #include int main() {int number[10]; int *p,i; void maxminvalue(int array[10]); printf(\:\\n\for(i=0;i<10;i++)

3

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4