首页 理论教育 数组地址、子串、动态内存分配

数组地址、子串、动态内存分配

时间:2023-11-01 理论教育 版权反馈
【摘要】:③s+3表示下标为3的数组元素地址。不妨设str2是str1的子串。这里malloc函数动态分配1个整型内存空间并使指针p访问该空间中存放的数据。

数组地址、子串、动态内存分配

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.返回字符串中第一次出现另一字符串的位置函数如下:

编写主函数调用此函数,对输入的两个字符串,能够返回前面字符串中第一次出现后面字符串的位置。

提示与分析:

① 找出字符串s中含有子串ss第一次出现的位置,若找到则返回要找的位置。否则返回0。

② 用字符指针作为形参,主函数中必须有两个输入的字符串,其中一个是另一个的子串。不妨设str2是str1的子串。(www.xing528.com)

例如: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所指向的内存空间。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈