您的位置:首页 > 其它

指针的理解

2017-11-21 01:36 162 查看
·指针数组 

指针数组本质上是数组,是一个存放指针的数组。

Eg:    ①int *arr1[10];   

            ②char *arr2[10];

            ③char **arr3[5];

       ① ② ③ 均为指针数组,   ①是数组(int*类型)中元素是 (int*类型) ;

                                                   ②是数组(char*类型)中元素是(char*类型);

                                                   ③ 数组中存放 二级指针

·数组指针

数组指针本质上是指针,是一个指向数组的指针。 指针变量存放数组地址

Eg:int *pint;   指向整型数据的指针:

        float *pf;   指向浮点型数据的指针;

        int *p[10];       指针数组     数组中存放类型为 int *  类型的指针;

        int (*p)[10];     指针数组    指向整形数组的指针;

注:       int *p[10];    &     int (*p)[10];

              p 先与什么结合,即可表示 p 本质是什么 

              " [ ] "  的优先级于  " * " 的优先级

 

·函数指针

函数指针本质上是指针,是一个指向函数的指针,即指针变量保存的是函数的地址

 Eg:     void test(char* str);

              void (*p)(char*)         //p是一个指针,并且指向一个函数,这个函数参数是char*,返回类型是void型 

     

    哪一个可以存放函数test 的地址?

            void  (*p1)();

            void  *p2();

                   首先,能给储存地址,就要求p1或p2是指针   

                   p1可以存放。p1先和*结合,即p1是指针,指针指向一个函数,指向的函数没有参数,返回值为空

             (*(void(*)())0)();  

             void (*signal(int,void(*)(int)))(int);    简化为:void (*)(int) signal(int,void(*)(int)); 

·函数指针数组

数组是一个存放相同类型数据的存储空间,要把 函数的地址 存到一个数组中,那这个数组就叫函数指针数组。

如何定义:

                 int (*p1[10])();      √       p1先和“  [ ]  ”结合,说明p1是数组,数组内容是 int(*)()类型的函数指针

                 int *p2[10]();         ×

                 int (*)()p3[10];      ×    定义常函数指针数组

用途:转移表

例子:计算器

·指向函数指针数组的指针 

指向函数指针数组的指针,指针指向一个数组,数组的元素都是函数指针

Eg:

            void (*(*a)[10])();                  函数指针数组的指针


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