浅谈指针数组、数组指针及函数指针

来源:互联网 发布:孙骁骁家庭知乎 编辑:程序博客网 时间:2024/05/22 13:41

C语言中,指针可以说是C语言的灵魂,我们想要熟练运用C语言,必须深入的了解指正的各种类型,及其该如何运用。
以下是我对一些指针的总结:

1、指针数组
2、数组指针
3、函数指针
4、函数指针数组
5、指向函数指针数组的指针

一、指针数组

指针数组:是一个数组,数组的每一个元素都是指针。
例如:

   int *arr[10]      一个存放 10int * 指针的数组   char **arr[10]    一个存放 10int ** 指针的数组

二、数组指针
数组指针:数组指针是一个指针,该指针指向的是一个数组。
例如:

int (*p)[10]    一个p指针,指向一个数组大小为10的数组

指针数组,数组指针,名字绕口,但我们区分他们,只需要掌握 ‘ * ’ 和 ‘ [ ]’的优先级,‘ [ ]’的优先级比‘ * ’高,而()的优先级又比‘ [ ] ’高。
如上面的例子
int arr[10] ,arr先与‘[ ]’先结合,它肯定是一个数组,存放的是int ,所以是指针数组。
int (p)[10] , p先与 ‘ ’结合,它肯定是一个指针,指向的是int型大小为10的一个数组。

我们在使用数组指针的时候应该注意,类型是否匹配。如果要接受一个数组的指针,我们应该定义接受数组地址的指针为数组指针。

int arr[5] = {0};int *p = &arr;                //这是类型不匹配,&arr得到的是数组的地址int (*p)[5] = &arr;           //正确

三、函数指针

函数指针:函数指针就是一个指针,指向一个函数。
这里写图片描述
我们知道函数也是有地址的,当我们想调用函数的时候,我们可以通过它的地址使用它。就是函数指针。使用它的时候我们也需要注意类型匹配的问题。

void (*pfun)()   //pfun与‘*’结合,是一个指针,指向的是一个返回值为void,没有参数的函数

四、函数指针数组
函数指针数组:它是一个数组,数组每个元素都是一个函数指针。
下面是一个函数指针数组简单使用的例子:

int test1(int x,int y){    return x+y;}int test2(int x, int y){    return x-y;}int main(){    int num = 0;    int num1 = 0;    int num2 = 0;    int ret = 0;    int (*p[3])(int x,int y) = {0,test1,test2};    printf("*******************\n");    printf("***1.add   2.sub***\n");    printf("*******************\n");    printf("please enter:\n");    scanf("%d",&num);    if(num == 1)    {        printf("enter num1 & num2:\n");        scanf("%d %d",&num1,&num2);         ret = p[1](num1,num2);            //函数指针数组的使用    }    else if(num == 2)    {        printf("enter num1 & num2:\n");        scanf("%d %d",&num1,&num2);         ret = p[2](num1,num2);          //函数指针数组的使用    }    printf("输出结果为 %d\n",ret);    system("pause");    return 0;}

五、指向函数指针数组的指针
函数指针数组的指针:是一个指针,指针指向一个数组,数组的每个元素是函数指针。

void test(const char* str){printf("%s\n",str);}int main(){void (*pfun1)(const char*) = test;  //函数指针pfun1void (*pfun2[3])(const char *str);  //函数指针数组pfun2pfun2[0] = test;  void (*(*pfun3)[3]))(const char*) = &pfun2;//指向函数指针数组的指针pfun3return 0;}

我们只有知道‘ * ’和‘ [ ] ’的优先级,我们就能区别是指针还是数组。以上就是我对一些指针的总结。

原创粉丝点击