精华内容
下载资源
问答
  • 指针 指针数组 指针数组的指针 数组指针 数组指针的数组 函数指针 函数指针数组 指向函数指针数组的指针

           指针是c语言的灵魂所在,然而因为其过于灵活,在使用的过程中难免出错。接下来我们简单分析一下常见的指针运用。

    指针:

         1  一级指针

             char *p1 =  “abcdef”;

          2  二级指针

             char **p2 = &p1;

    指针数组:

         1 char *arr[5] ;  (在数组中存放5个char* 指针)

    指针数组指针

         1 char* arr[5];

            char * (*parr)[5] = &arr;

           parr就是指向指针数组arr的指针 (即parr为指针数组的指针)

    数组指针:

         1   int   arr[5] = {1,2,3,4,5};

              int  (*p)[5] = &arr ;          p即为指向数组的指针,又称数组指针

    数组指针的数组:

          int arr1[3] = {1,2,3};

          int arr2[3] = {4,5,6};

          int (*parr[2])[3]={arr1,arr2};


    函数指针:

      先写一个简单的函数

            int add(int x, int y)

             {

                return x+y;

             }

        int  (*pfun)(int, int);

                pfun = add;

    这样一来  pfun就是指向函数add的指针(即函数add的指针)。

    下面是定义一个函数指针的方法:



    指向函数指针数组的指针:

               函数指针数组也是指针数组,在这个数组中存放的是函数的指针

        eg: 我们先写加减乘除四个子函数。

             

            int (*pfunarr[4])(int, int) = {add, sub, mul, div};//这个数组就是函数指针数组      pfunarr就是指向函数指针数组的指针

    展开全文
  • C++ 函数指针 指向类成员函数

    千次阅读 2018-12-07 10:14:19
    //定义类的成员函数指针 typedef void (A::*A_mFun)(void); typedef void (B::*B_mFun)(void);       int main() {  //Code  A a;  B b;  A_mFun pAFun = &(A::Test); //Note:Test成员函数必须为...

    //A类与B类的定义
    class A
    {
    public:
      void Test()
      {
        cout << "A::Test()" << endl;
      }
    };
     
    class B : public A
    {
    public:
      void Test()
      {
        cout << "B::Test()" << endl;
      }
    };
     
    //定义类的成员函数指针
    typedef void (A::*A_mFun)(void);
    typedef void (B::*B_mFun)(void);
     
     
     
    int main()
    {
      //Code
      A a;
      B b;
      A_mFun pAFun = &(A::Test); //Note:Test成员函数必须为public,否则会报错
      B_mFun pBFun = &(B::Test); //Note:Test成员函数必须为public,否则会报错
      (a.*pAFun)();        //输出A::Test()
      (b.*pBFun)();        //输出B::Test()
      (b.*pAFun)();        //输出A::Test()
     
      A* pA = &a;
      B* pB = &b;
      (pA->*pAFun)();       //输出A::Test()
      (pB->*pBFun)();       //输出B::Test()
      (pB->*pAFun)();       //输出A::Test(),B*变量可赋值给A*变量
     
     
      return 0;
    }

    展开全文
  • 如何打印函数指针指向的函数名

    千次阅读 2013-02-18 18:43:36
    在涉及自己创建的函数指针,为了方便调试,希望将函数指针当前指向的函数名打印出来。直接打印不可能,所以需要在定义指针时添加上指示符。 例如stackoverflow上的一段代码样例 ...

    在涉及自己创建的函数指针,为了方便调试,希望将函数指针当前指向的函数名打印出来。直接打印不可能,所以需要在定义指针时添加上指示符。

    例如stackoverflow上的一段代码样例

    http://stackoverflow.com/questions/351134/how-to-get-functions-name-from-functions-pointer-in-c// Define it like this
    typedef struct
    {
      char        *dec_text;
      #ifdef _DEBUG_FUNC
      void        (*action)(char);
      #endif
    } func_Struct;
    
    // Initialize it like this
    func_Struct func[3]= {
    #ifdef _DEBUG_FUNC
    {"my_Set(char input)",&my_Set}};
    {"my_Get(char input)",&my_Get}};
    {"my_Clr(char input)",&my_Clr}};
    #else
    {&my_Set}};
    {&my_Get}};
    {&my_Clr}};
    #endif 
    
    // And finally you can use it like this
    func[0].action( 0x45 );
    #ifdef _DEBUG_FUNC
    printf("%s",func.dec_text);
    #endif

    linux下可以通过backtrace、backtrace_symbols、backtrace_symbols_fd这样的函数,结合 -rdynamic

    展开全文
  • 指针数组 首先从名字就可以知道这是一个数组,是存放指针的数组。 先看几种指针数组: int * 数组指针 函数指针 函数指针数组 指向函数指针数组的指针

    指针数组

    首先从名字就可以知道这是一个数组,是存放指针的数组。
    先看几种指针数组:
    int *arr1[10];
    char *arr2[5];
    char **arr3[6];
    因为 [ ] 的优先级是高于 * 的,所以数组名会先于 [ ] 相结合组成数组。 再于 int * / char *类型结合,组成存放该类型的数组。



    指针数组因为存放的都是指针所以不管是 int *   char * 还是 char ** 其大小都是四个字节。

    数组指针

    从名字看就知道是指针,是指向一个数组的指针。

    int (*p)[10];
    char (*p)[10];
    由数组指针知道 [ ] 的优先级是高于 *  的,所以用()来提升指针先结合。

    int (*p)[10];  //  是一个指向10个整形的一维数组的指针
    char (*p)[10]; //  是一个指向10个字符型的一维数组的指针

    数组的存储方式



    因为指向的是一个数组,所以大小由数组决定


    函数指针

    指向函数的指针,通俗的说也就是函数的地址
    void(*pfun)();
    pfun 先和*结合,说明pfun是指针,指针指向的是一个函数,指向的函数无参数,返回值类型为void
    也就是说 其可以保存函数的地址



    函数指针数组

    int (*parr[3])();
    parr先与 [ ]结合,说明是一个数组,再与*结合,说明数组存放的是指针,指针都指向的是函数
    函数指针数组的使用(转移表)
    例子:计算器
    #include<stdio.h>
    
    int add( x, y)
    {
    	return x + y;
    }
    int sub(x,y)
    {
    	return x - y;
    }
    int mul(x,y)
    {
    	return x * y;
    }
    int div(x,y)
    {
    	return x / y;
    }
    int main()
    {
    	int x, y;
    	int input = 1;
    	int ret = 0;
    	int(*parr[5])(int x, int y) = { 0, add, sub, mul, div }; //转移表
    	while (input)
    	{
    		printf("*******************************\n");
    		printf("***** 1.add         2.sub *****\n");
    		printf("***** 3.mul         4.div *****\n");
    		printf("*******************************\n");
    		printf("请选择:");
    		scanf("%d", &input);
    		if ((input > 0 && input < 5))
    		{
    			printf("输入你要计算的数:\n");
    			scanf("%d  %d", &x, &y);
    			ret = (*parr[input])(x, y);
    		}
    		else
    			printf("输入有误!\n");
    		printf("%d\n", ret);
    	}
    	return 0;
    }
    输出结果:


    指向函数指针数组的指针 

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

    定义方式:

    #include<stdio.h>
    void test(const char *str)
    {
    	printf("%s\n", str);
    }
    int main()
    {
    	void (*pfun)(const char*) = test;
    	//函数指针pfun
    	void (*pfunArr[5])(const char* str);
    	//函数指针的数组pfunArr
    	void (*(*ppfunArr)[10])(const char* str) = &pfunArr;
    	//指向函数指针数组pfunArr的指针ppfunArr
    	return 0;
    }




    展开全文
  • 理解 指针数组 数组指针 函数指针 函数指针数组 指向函数指针数组的指针
  • 函数指针函数指针指向可执行代码段或调用可执行代码段的信息块的指针,而不是指向某种数据的指针。函数指针是将函数当做普通数据那样存储和管理。函数指针有一种固定的形式,就是包含一个确定的返回值类型和若干...
  • 函数指针和指针函数用法和区别

    万次阅读 多人点赞 2018-05-24 08:11:10
    函数指针和指针函数,在学习 C 语言的时候遇到这两个东西简直头疼,当然还有更头疼的,比如什么函数指针函数、指针函数指针、数组指针、指针数组、函数指针数组等等,描述越长其定义就越复杂,当然理解起来就越难,...
  • 函数指针指向的是函数而非对象。和其他类型一样,函数指针指向某种特定类型。因为函数的类型由它的返回类型和形参类型共同决定,与函数名无关,所以想要声明一个函数指针,只需要用指针替换函数名即可,例如:比较...
  • 和其他指针一样,函数指针指向某种特定类型,所有被同一指针运用的函数必须具有相同的形参类型和返回类型。 int (*pf)(int, int); // 声明函数指针 这里,pf指向的函数类型是int (int, int),即函数的参数是两个...
  • 我们可以把函数的这个首地址(或称入口地址)赋予一个指针变量,即指针指向该函数的内存首地址,使指针变量指向函数所在的内存区域,然后通过指针变量就可以找到并调用该函数。 这种指针就是函数指针。 p=函数名;//...
  • 函数指针指向函数代码的起始地址 定义 返回类型 (*指针变量名)( ) ; //如: int (*p)(int a,int b);//定义函数指针 使用 : //定义+赋值 int (*p)(int a,int b); int isdigit(int a...
  • 所谓函数指针数组就是在之前的函数指针的基础上增加了[],由于[]的优先级高于*,故 pf先与[]结合,说明它是一个数组,再与*结合说明数组中的元素的类型是指针,再看后面的参数列表,说明每一个指针都指向一个函数的...
  • 和其它指针一样,函数指针指向某种特定类型。函数的类型由它的返回类型和形参类型共同决定。与函数名无关 void show(int a); //想要声明一个可以指向该函数的指针,只需用指针替换函数名即可 void(*print)(int a)...
  • 函数指针指向函数的指针变量。 因而“函数指针”本身首先应是指针变量,只不过该指针变量指向函数。这正如用指针变量可指向整型变量、字符型、数组一样,这里是指向函数。如前所述,C在编译时,每一个函数都有一个...
  • 指针数组表达式为:int *p[5] 理解:下标运算符[ ]的优先级是要高于指针运算符*,因此p先和下标运算符结合,决定了p首先是个数组,其类型int *,表明数组的元素都是都是指针。而数组占多少个字节由数组本身决定。...
  • 理解:定义了一个数组,而它的每个元素的类型是一个指向字符/字符串的指针。 元素表示:char *a[i] char *(a[i])是一样的,因为[]优先级高于* 思考:是否可以这样理解 (char*)arr[4]? 深入理解: 数组...
  • 函数指针

    千次阅读 2019-06-05 17:21:03
    函数指针指向的函数而非对象。与其他指针一样,函数指针也指向特定的类型。函数的类型是由返回值和参数列表决定,与函数名无关。例如: //比较两个字符串的长度 bool lenghtCompare(const string &s1, const ...
  • 函数指针(function pointer)是通过指向函数的指针间接调用函数。相信很多人对指向一般函数的函数指针使用的比较多,而对指向类成员函数的函数指针则比较陌生。...和其他指针一样,函数指针指向某种特定类型,所有被
  • 与普通的指针一样,函数指针也是指针,但是不同的是函数指针指向的不是类型,而是函数地址。函数指针是通过指向函数的指针间接调用函数。相信很多人对指向一般函数的函数指针使用的比较多,而对指向类成员函数的函数...
  • 指针函数指向函数指针变量

    千次阅读 2016-03-07 14:03:34
    指针变量也可以指向一个函数。一个函数在编译时被分配一个入口地址,这个函数入口地址就称为函数指针。可以用一个指针变量指向函数,然后通过该指针变量调用此函数。 1. 指向函数指针变量的一般定义形式...
  • 函数指针,就是指向函数的指针。在C++中,函数指针一般是指全局命名空间中的函数指针,类成员函数指针,与函数指针不同的是,类具有类域操作符,在声明类成员函数指针的时候,要指定成员函数返回值类型、类域操作符...
  • C++函数指针、指针函数、返回值为函数指针的函数浅谈 引言 函数指针、指针函数是C中重要而容易混淆的概念,博主将通过两个实例来说明这两个...定义了一个函数指针add,用于指向返回值为int,并且有两个int参数的函数...
  • C++函数指针

    千次阅读 2019-03-03 16:05:26
    函数指针指向的是函数并不是对象。和其他指针一样,函数指针指向某种特定类型,函数的类型由它的返回类型和形参类型共同决定,与函数名无关。 声明指向函数的指针的语法形式:用指针替代函数名 //比较两个string...
  • 指针函数和函数指针

    万次阅读 多人点赞 2019-03-30 16:21:36
    很多人因为搞不清这两个概念,干脆就避而远之,我刚接触C语言的时候对这两个概念也比较模糊,特别是当指针函数、函数指针函数指针变量、函数指针数组放在一块的时候,能把强迫症的人活活逼疯。 其实如果理解了这些...
  • 指向函数指针变量的用途之一就是可以把该函数的入口地址作为参数传递到其它函数(传递给形参)。 原理举例: 有一个函数名为fun的函数,它有两个形参x1和x2,并且定义x1和x2为指向函数指针变量。在调用fun函数...
  • 详解C语言指针函数、函数指针函数指针数组

    万次阅读 多人点赞 2018-07-09 11:08:24
    而在指针中,指针函数、函数指针、指针函数数组、函数指针数组、指向函数指针数组的指针等等概念看着又绕又头疼。本问总结了一下以上一些概念以及用法,并给出例程深化理解。 1. 指针函数 指针函数就是返回指针值...
  • 正确答案: A int (*(*F)(int, int))(int) int (*F)(int, int) ... 先看优先级最高的,即内部括号(*F),看出F是一个指针,然后再看右边(int , int),说明它是一个函数指针,(int,int)为此函数的形参列表.

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 775,003
精华内容 310,001
关键字:

函数指针指向