一、实训目的
1.理解指针和函数的关系。
2.学会使用指向函数的指针。
3.了解动态内存分配。
3.提高阅读程序和程序设计能力。
二、实训内容
1.写出下面程序的运行结果,然后上机验证。
提示与分析:
①用指针作函数的参数传递一维数组。
②当执行语句“fun(s,2);”时,形参的指针p复制数组s的首地址,形参n赋值2。在函数体中p[n+5]=‘\0’与s[n+5]=‘0’等价,即将s[7]的值‘8’用‘\0’替代。当语句“fun(s,2);”执行结束时,数组s存放的字符串为“1234567”。
③s+3表示下标为3的数组元素地址。
2.下面程序的功能是输出字符串中大写字母的个数,请填空。
提示与分析:
①用字符指针作函数的参数传递字符数组的程序的功能是,统计字符串中大写字母的个数。
②因为函数cap()位于主函数之后,所以主函数中有函数cap()的说明语句。
③printf语句中的输出项“cap(a)”,表示形参的指针p复制数组a的首地址。函数体中的语句“int k=0;”,用来说明存放字符串中大写字母个数的变量k的初始值为0。在循环语句中,当指针p没有指向字符串结束符时,判断p所指的字符是否为大写字母,若是,则k值增1,否则k值不变;每次循环,指针p下移一个位置。
3.返回字符串中第一次出现另一字符串的位置函数如下:
编写主函数调用此函数,对输入的两个字符串,能够返回前面字符串中第一次出现后面字符串的位置。(www.xing528.com)
提示与分析:
①找出字符串s中含有子串ss第一次出现的位置。若找到则返回要找的位置,否则返回0。
②用字符指针作为形参,主函数中必须有两个输入的字符串,其中一个是另一个的子串。不妨设str2是str1的子串。
例如:str1[ ]="program"和str2[ ]="gra",在str1的第4个位置出现str2。
4.有4名学生,每个学生考4门课程,要求在输入学生的序号(序号从0开始)以后能输出该学生的全部成绩。请编写一个函数int *search(int(*ptr)[4],int n)。
下面给出了部分源程序,请不要改动。读者仅在指针函数search的花括号中填入所编写的若干语句即可。
提示与分析:
指针型函数search的形参是行指针变量ptr和整型变量n,而主函数中调用该函数的实参是数组名score和从键盘输入的学生序号m。也就是说,ptr指向数组score的第0行,n赋值为m。
在指针函数search的函数体中:ptr+n表示指向数组score的第m行指针,*(ptr+n)表示指向数组score的第m行的第一个元素的指针,该指针就是指针型函数search的返回值。
5.写出下列程序的运行结果,然后上机验证。
提示与分析:
函数指针可以指向一个函数并可以调用该函数。
6.写出下面程序的运行结果,然后上机验证。
提示与分析:
①动态分配内存的malloc函数,能够分配所需字节大小,返回指向所分配空间的第一个字节的指针。这里malloc函数动态分配1个整型内存空间并使指针p访问该空间中存放的数据。
②free函数释放指针p所指向的内存空间。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。