C语言的那些经典程序 第八期
上期带大家欣赏的指针经典程序,感觉如何?这期我们准备了几个新指针的内容,灵活运用指针可以大大减少程序的复杂度,接下来就让小C来说说这三个有关指针应用的经典程序吧!
1指向函数的指针源程序:
运行结果:
程序分析:
(1) main函数中,"int (*p)( int,int );"语句定义了一个指向函数的指针变量p, p所指向的函数必须是int类型。这条语句中的"( int,int ;)";用来说明p所指函数的参数个数和参数类型,这些信息应与p所指函数的参数的信息一一对应, ;如果所指函数没有形参,这对圆括号不可省略。注意,如果将这条语句写成"int *p( int,int);",则说明p不是指针变量,而是说明p是一个函数名,该函数的返回值的类型是基类型为int的指针类型。
(2) main函数中,"p= max;"语句把max函数的起始地址赋给指针变量p.因为是将函数的起始地址赋给p,不涉及实参与形参的结合问题,所以不能写成"p= max(a,b);"。
(3) main函数中,"c =(*p)(a,b);"语句实现对函数的调用。用指向函数的指针变量调用函数时,只需用(*p)代替函数名即可,在(*p)之后的括号中根据需要写上实参。其含义为:调用由p指向的函数,实参为";a,b";,得到的函数值赋给C。这条语句相当于";c= ;max(a,b);";。
2指针数组源程序:
运行结果:
程序分析:
程序中二维数组a可以看成3个维数组,p_data 是一个有3个元素的指针数组。p_data的作用是用来存放数组a的每行元素的首地址,使指针数组的每个元素p_data[i]指向数组a的相应行。可以用指针数组名p_data 或指针数组元素p_data[i]引用数组a的元素。*(*(p_data+i)+0), ;*p_data[i]、*(p_data[i]+0)或p_data[i][0]表示引用第i行第0列元素a[i][0]; *(*(p_data+i)+j), *(p_data[i]+j)或p_data[i][j]表示引用第i行第j列元素a[i][j]。
指针数组一般与二维数组建立关联,使用时需要注意:定义指针数组的长度与定义一维数组的行数相同。
源程序:
运行结果:
程序分析:
sort函数实现了选择排序的算法,main函数中调用sort函数,实参为数组名a,将a数组首元素的地址传递给形参指针变量b。在sort函数中引用*(b+k)就是引用实参数组中对应的元素a[k]。sort 函数没有返回值,故其函 数值类型为void。
本期的经典程序就到这里啦,大家是否看过瘾了呢,小C水平有限如果大家有更好的程序希望能积极投稿反映哦,咱们下期再见!
投稿邮箱:2080803313@qq.com编辑|排版|钱雄
审校|李倩倩
责任编辑|邱杰 熊克媛
宿州学院信息工程学院学生会出品
如需转载请联系后台