一、指针函数和函数指针
指针函数本质是一个函数,其返回值为指针。
函数指针本质是一个指针,其指向一个函数。
1.1、指针函数
指针函数,最后函数的返回结果是一个指针,可以这么来记,*func(),首先是 * 也就是指针,然后再是func()函数,合起来就是指针函数。
int *func(int a,int b);
int* func(int a,int b);
int * func(int a,int b);
/************************************
指针函数的使用:int *myMin(int *a,int *b);
************************************/
int* minNumber = myMin(myMin(&a,&b),&c);
printf("the min number is: %d",*minNumber);
1.2、函数指针
函数指针,顾名思义,是一个函数的指针,也就是说这个是指针指向函数,上端代码秒懂。
#include <stdio.h>
int myMax(int a,int b){
return a>b?a:b;
}
int main()
{
/***********************************
函数指针的使用:int (*p)(int int ) = &myMax;
************************************/
int (* p)(int,int) = &myMax;
int a=1,b=2,c=3;
int d;
d = p(p(a,b),c);
printf("the max number is: %d",d);
return 0;
}
上述的定义的int类型的(* p)指针,定义的时候指向了myMax函数,所以称之为函数指针。
#include <stdio.h>
int myMax(int a,int b){
return a>b?a:b;
}
int *myMin(int *a,int *b){
return *a>*b?a:b;
}
int main()
{
int a=1,b=2,c=3;
/************************************
指针函数的使用:int *myMin(int *a,int *b);
************************************/
int* minNumber = myMin(myMin(&a,&b),&c);
printf("the min number is: %d",*minNumber);
printf("\n");
/***********************************
函数指针的使用:int (*p)(int int ) = &myMax;
************************************/
int (* p)(int,int) = &myMax;
int maxNumber;
maxNumber = p(p(a,b),c);
printf("the max number is: %d",maxNumber);
return 0;
}
留个疑问,下面的执行结果如何?
a = *p++;
a = (*p)++;
#include <iostream>
#include <stdio.h>
using namespace std;
int main()
{
int a = 10;
int *p = &a;
int b = (*p)++;
//printf("%d %d %d\n",&a,p,&b);
printf("%d %d %d",a,*p,b);
printf("\n");
int x = 100;
int *q = &x;
int y = *q++;
//printf("%d %d %d\n",x,*q,y);
//printf("%d %d %d\n",&x,q,&y);
printf("%d %d %d",x,*q,y);
/*****************************\
结果为:
11 11 10
10 11 10
解释:
b = *p++首先
y = *q++;
******************************/
return 0;
}
二、指针数组和数组指针
指针数组实际上一个数组,只不过这个数组是由指针定义的数组
数组指针实际上一个指针,只不过这个指针是数组的首地址