1.指针函数
指针函数:返回值是指针的函数。
指针函数的定义:
指针函数类型 *函数名(){
return 地址;
}
实例1:用指针函数输出两个数中大数的地址。
#include <stdio.h>
int *bigAdress(int *a, int *b){
return *a > *b ? a : b;
}
int main(int argc, const char * argv[]) {
// 定义并初始化两变量
int a = 23;
int b = 89;
// 输出a,b的地址
printf("&a = %p\n&b = %p\n",&a,&b);
// 用指针函数找出大数的地址并输出
printf("大数地址为:\n%p", bigAdress(&a,&b));
return 0;
}
实例2:通过指针函数,输入一个1~7之间的整数,输出对应的星期名。
#include <stdio.h>
char *printDay(int n){
// 定义一个字符串指针数组
char *week[7] = {"星期一","星期二","星期三","星期四","星期五","星期六","星期日"};
return n > 0 && n < 8 ? week[n - 1] : "输入错误!";
}
int main(int argc, const char * argv[]) {
// 根据输入的整数输出对应星期名
printf("%s", printDay(7));
return 0;
}
实例3:用指针变量作为函数的参数,求出10个数的最大值。
#include <stdio.h>
/**
* 找出数组中的最大值
*
* @param a 传入的数组
* @param len 数组长度
*
* @return 最大值
*/
int max(int *a, int len){
// 定义变量储存最大值
int max = *a; // 初始化为数组首元素
// 找出最大值
for (int i = 1; i < len; i ++) {
if (*(a +i) > max) {
max = *(a + i);
}
}
return max;
}
int main(int argc, const char * argv[]) {
// 定义并初始化一个数组
int a[10] = {12,23,34,13,999,4,0,-45,9,10};
// 调用函数找出最大值
int m = max(a, 10);
// 输出最大值
printf("%d", m);
return 0;
}
2.函数指针
函数指针变量:存放函数的首地址的指针变量就是函数指针变量。
函数指针变量的定义
返回值类型 (*变量名)(函数的参数);
int (*p)(int a, int b); // 定义了一个函数指针p,可以存放返回值为int类型,并且有两个int类型的形参的函数
int (*p1)(int ,int ); // 定义函数指针的时候,可以不用写形参名
函数指针的初始化
p = sum; // sum是函数名,存的就是函数在内存中的首地址
函数指针的使用
1)定义函数指针
2)给函数指针初始化
3)用函数指针间接调用函数
注意:
1)函数指针变量不能进行算术运算
2)函数调用中“(*指针变量名)”的括号不可少
函数指针的使用举例
#include <stdio.h>
// 定义函数
int sum(int a, int b){
return a + b;
}
int main(int argc, const char * argv[]) {
// 定义函数指针
int (*p)(int ,int );
// 给函数指针初始化
p = sum;
// 用函数指针间接调用函数
int s = p(23,89); // 也可以写成(*p)(23,89);
printf("%d", s);
return 0;
}