上一节中介绍了函数型指针的概念,在使用过程中要注意函数型指针与返回指针型数据的函数的区别。函数调用过程结束时,被调用的函数可以带回一个整型数据、字符型数据、实型数据等,也可以带回一个指针型数据,即地址。这种返回指针型数据的函数又称为指针函数,它的一般定义形式为:
数据类型*函数名(参数表);
其中,数据类型说明了所定义的指针函数在返回时带回的指针所指向的数据类型。例如:
int*x(a,b);
定义了一个指针函数*x,调用它以后可以得到一个指向整型数据的指针,即地址。请注意,在指针函数*x的两侧没有括号(),这是与函数型指针完全不同的,也是很容易搞混的,实际使用时一定要注意。
例2-48 指针函数应用。
内存中存有巡回检测3个通道的温度值(每个通道4个点),要求用户在输入通道号以后,立即输出该通道所有点的温度值。
程序执行结果:
程序中将巡回检测得到的某个通道各点温度值存放在一个二维数组T[3][4]中,通道号作为数组的行,各点温度值作为数组的列。输入通道号时要注意,通道号是从0算起的。函数search被定义为指针型函数,它的形式参数pointer是指向包含4个元素的一维数组的指针变量。pointer+1指向二维数组T的第0行,而*(pointer+1)则指向第0行第0列元素。
pt是一个指针变量,它指向实型变量(而不是指向一维数组)。main()函数调用search()函数,将T数组的首地址传递给pointer(注意T是指向数组行的指针,而不是指向数组列元素的指针)。m是要查找的通道号。调用search()函数后,得到一个地址(指向第m个通道第0点温度值),并将这个地址赋给变量p。*(p+i)表示该通道第i点的温度值,从而可将该通道4个点的温度值输出来。读者可参考图2.12来加深对这个例子的理解。
图2.12 数组与指针的关系