一个函数可以返回一个int类型或double类型的值,也同样可以返回一个“地址”值,这就是一个返回指针的函数。如我们前边用到的动态内存分配的函数,返回的都是分配的内存区域的首地址,都是返回指针的函数。
返回指针的函数定义格式如下:
返回指针的函数从概念上来说是一个函数,因此首先满足函数定义的要求,这和前边所学一致,只是其返回类型为指针而已。
如定义:
则仅说明该函数返回的是一个指向整型的指针。
【例7-29】输入一个1~12的整数,输出其对应的月份的英文单词。
程序分析
(1)mon函数中的那么是一个字符指针数组,其每一个单元name[n]都是一个字符指针,指向每一个月份英文单词的首地址,因此它是一个返回指针的函数,其类型定义为char*。
(2)name[n]是整数n(1~12)对应的英文月份的首地址,返回后赋给了main函数中的字符指针变量str,str即成为该英文单词的首地址。
(3)用%s输出地址str起始的英文单词,得到整数n对应的英文的月份。
返回指针的函数在编程中应用比较广泛,希望同学们好好理解和掌握。
综合实训
1.请输入正整数n并用筛法求出n以内的素数。
2.请输入n和n个整数,并将这n个整数按照升序排序后输出排序结果。
课后习题
一、单项选择题
1.下面关于指针的初始化中,正确的是( )。
A.int a,*p=a B.int a,*p=&a
C.int a;double*p=a D.int a;double*p=&a
2.下面关于指针变量的描述中,正确的是( )。
A.指针变量可以存放某个对象的地址
B.指针变量的类型指的是它存放的数值的类型
C.指针变量也有地址,其地址也是一个指针
D.指针变量的值是可以改变的(www.xing528.com)
3.如有定义:int a[10][20],*p;下面对指针赋值中不正确的是( )。
A.p=a[0]B.p=a C.p=&a[3][5]D.p=*(a+3)
4.如有定义:int a[10]={1,2,3,4},*p=a+2;则执行printf(“%d,%d”,*p++,a[2])后,输出结果为( )。
A.3,3 B.3,4 C.4,3 D.4,4
5.如有定义:int a[10][20],(*p)[20];下面对指针p赋值中正确的是( )。
A.p=a+3 B.p=a[3]C.p=*a+3 D.p=*(a+3)+4
6.如有定义:char s[]=”abcdefg”,*p=s+2;则执行printf(“%s”,p)后,输出( )。
A.abcdefg B.bcdefg C.cdefg D.ab
7.以下程序的输出结果是( )。
A.gm B.rg C.or D.ga
二、程序阅读题
1.以下程序的输出结果是_________。
2.以下程序的输出结果是________。
3.以下程序的输出结果是_________。
4.以下程序的输出结果是________。
三、程序设计题
1.请编写函数fun,函数的功能是:在字符串中所有数字字符前加一个$字符。例如,输入:A1B23CD45,则输出为:A$1B$2$3CD$4$5。
2.编写一个函数,该函数可以统计一个子串在另一个字符串中出现的次数。例如,输入的字符串为:asdasasdfgasdaszx67asdmklo,子字符串为:as,则应输出6。
3.定义一个整型二维数组并初始化,编程求该数组所有元素的和。要求:分别用数组下标法和指针法实现。
4.输入n和n个整数,然后输入一个整数k,编程求出数组中第k大的数。要求读入n之后用动态分配函数为数组申请内存空间,求第k大的数的功能用函数实现,并用指针作为函数的参数。
5.输入n和n个整数,并定义一个函数,用该函数同时求出这n个整数中的最大值和最小值。
6.输入n和n个整数并对这n个整数从小到大排序,要求排序功能用函数实现并用指针作为函数的参数。
7.输入m和n两个整数,并利用动态内存分配方法开辟一个m行n列的二维数组,输入m×n个整数后,对二维数组中的每一行按照从小到大的顺序排序,要求排序功能用函数实现且使用指针作为函数的参数。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。