您的位置:首页 > 其它

指针与数组,指针与函数之间的关系

2017-02-13 23:41 197 查看

指针数组和数组指针

指针数组,它的关键在于是一个数组,即数组中每个元素都是指针。

数组指针,他的关键在于是指针变量,即这个指针指向一个数组。

#include<stdio.h>
int main ()
{
int arr [4] = {0};//这是一个数组,大家都知道。
int *parr1[4];//这是指针数组,首先[]的优先级比*的优先级高,所以parr
//先与[]结合,它是一个数组,然后再与*结合,即数组中的
//每个元素都是指针。
int (*parr2)[4];//这是数组指针,因为()的优先级比[]的高
//所以parr是一个指针变量,然后与[]结合
//所以,这是数组指针。
int *(*parr3)[4];//较为复杂一点的数组指针,首先parr3是一个指针变量,
//然后与[]结合,变为数组指针,而前面又有*,所以它可以指
//向一个大小为3个元素的数组,每个元素是指针。
}


函数指针

函数指针就是函数的指针,他是一个指针,指向一个函数。

#include <stdio.h>
#include <string.h>
char* fun (char *p1,char *p2)
{
int tmp = 0;
tmp = strcmp(p1,p2);
if (tmp==0)
{
return p1;
}
else
{
return p2;
}

}
int main ()
{
char *(*pfun)(char *p1,char *p2);
pfun = &fun;
(*pfun)("aa","bb");
return 0;}//这个例子就很好的解释了函数指针这个定义。我们清楚表达式
//"char*(*pfun)(char*p)"定义的是一个函数指针pfun。
//首先通过(*pfun)取出存在这个地址上的函数,然后调用。


函数指针的数组

函数指针的数组,它是一个数组,数组中的每个元素是一个函数指针,这个指针可以指向一个函数。

#include <stdio.h>
#include <string.h>
char *fun1(char*p)
{
printf ("%s\n",p);
return p;
}
char *fun2 (char *p)
{
printf ("%s\n",p);
return p;
}
char *fun3 (char*p)
{
printf ("%s\n",p);
return p;
}
int main ()
{
char *(*pfun[4])(char *p)//这里的表达式表示的就是函数指针的数组
pfun[1] = fun1;//可以直接用函数名表示地址
pfun[2] = &fun2;//也可以在函数名前加取地址符号。
pfun[3] = &fun3;

}


函数指针数组的指针

它指的还是一个指针,只不过这个指针指向一个数组,这个数组里的元素是可以指向函数的指针,有点绕。

void (*(*pfun)[3])(char *)//首先pfun是一个指针变量,然后指向一个数组,这个
//数组有三个元素,这几个元素可以指向函数的指针,函数
//的参数是char *,返回值为 void


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息