一个指向指针函数的函数指针

首先明白两个概念:

函数指针:一个指向函数的指针,这个指针获得对应的函数名的地址。比如说整型指针,我们知道是一个指向整型数据的指针,那么函数指针顾名思义就是一个指向函数的指针,

        声明一个整型变量这样写: int a;

     声明一个整型指针这样写:int * a; //即变量名加个*号

     声明一个返回值为整型的函数这样写: int Swap(int*,  int*);

     声明一个指向返回值为整型的函数的指针这样写:int (*Swap)(int*, int*);//其中这个int就是所指向的函数的返回值类型,如果这个指向的函数的返回值是个整型指针,那么就可以写成 int* (*Swap)(int*, int* )

指针函数:一个返回值为指针的函数,比如说整型函数是值返回值为整型的函数,那么指针函数的意思就是返回值是指针,

     声明一个返回值为整型的函数这样写: int a(int, int);

     声明一个返回值为整型指针的函数这样写:int * Swap(int*, int*); 把后面的Swap(int*, int*)当成也给变量p ,也就成了int* p这种常见的形式了。

一个指向指针函数的函数指针:

    首先分析下,这个描述其实描述的还是函数指针,这个指针指向一个函数,而且函数的返回值是个指针,看起来有点绕:

    1. 这个指针的组成部分有:   指向函数的返回值类型      (* 指针变量)(函数的形参表)

    2. 即写成 ,           int *      (*    p      )(int*, int*)

    3. 写漂亮点就是 int *(*p)(int*, int*)

 1 #include<stdio.h>
 2 //下面定义一个指针函数
 3 int* Swap(int *a, int *b){
 4
 5     int temp;
 6     temp = *a;
 7     *a = *b;
 8     *b = temp;
 9     return a;
10 }
11 //定义某个函数的函数指针,首先必须要申明这个指针指向一个返回值是什么样的函数,int* 这是函数的返回类型,
12 //(*pSwap)是声明一个指针,所以int* (*pSwap)(int*,int*) 是一个指针函数的函数指针。
13 int main(){
14     int* (*pSwap) (int *, int *);//下面定义一个函数指针,这是一个指针,指向一个返回值为int *的函数
15     int a = 99, b= 100, c= 0;
16     c=*Swap(&a,&b);
17     pSwap=Swap;//得到这个函数的地址
18     printf("返回的数值是,a原来是99,现在是: %d\n",c);
19     printf("返回的数值是,a原来是99,现在是: %d\n",*pSwap(&a, &b));
20     return 0;
21 }

     

原文地址:https://www.cnblogs.com/robohou/p/8588232.html

时间: 2024-11-11 01:15:08

一个指向指针函数的函数指针的相关文章

C++数组指针、指针数组、函数指针的核心概念

1.什么叫数组指针? 数组指针:一个指向一维或者多维数组的指针. 比如:int * b=new int[10];指向一维数组的指针b ; 注意,这个时候释放空间一定要delete [] ,否则会造成内存泄露,b 就成为了空悬指针.         int (*b2)[10]=new int[10][10]; 注意,这里的b2指向了一个二维int型数组的首地址.         注意:在这里,b2等效于二维数组名,但没有指出其边界,即最高维的元素数量,但是它的最低维数的元素数量必须要指定!就像指向

解析 指针数组,数组指针,函数指针

一 :关于指针和堆的内存分配 指针数组 : 一个数组里放的都是指针,我们把他叫做指针数组 int * a[10]; 由于它是一个数组,他是不能从堆空间里申请空间的. 只能做个循环,每个元素去申请空间,或者每个元素去指向另外的地址空间. 数组指针 : 一个指向一唯或者多唯数组的指针: int * b=new int[10]; 指向一唯数组的指针b ; 一些例子: int (*b2)[10]=new int[10][10]; 注意,这里的b2指向了一个二唯int型数组的首地址. 注意,这里的b2的类

C语言基础学习7:返回指针值的函数

一个函数可以返回一个整型值.字符值.实型值等,也可以返回指针型的数据,即地址,返回的是指针类型. 返回指针值的函数的一般定义形式为; 数据类型 *函数名(参数列表) 例如: int *a(int x, int y); a作为函数名,调用它之后能得到一个指向整型数据的指针(地址). ()优先级高于*,因此a先与()结合,这是函数形式,返回值为指针形式. 1 #include <stdio.h> 2 float *search(float (*pointer)[4]); 3 float *sear

委托&amp;指针函数&amp;回调函数

委托 委托是一种数据类型,像类一样(可以声明委托类型变量)方法参数可以是int string 类类型. //1 //委托小结 //1 定义一个委托需要delegate关键字 //public delegate void WriteTimeToAny(); //2 委托用来存储的方法要与定义的委托类型相一致 //3 委托是一个数据类型,用时需要传递一个变量,可以使用关键字new也可以不使用 //使用委托的意义 //主要是注入代码,写入一个委托类型方法方便以后使用时可以用实现相应的功能 //2 //

当this指针成为指向之类的基类指针时,也能形成多态

this指针: 1)对象中没有函数,只有成员变量 2)对象调用函数,通过this指针告诉函数是哪个对象自己谁. 1 #include<iostream> 2 using namespace std; 3 class Shape 4 { 5 public: 6 //void cal_display(Shape* this) 7 void cal_display(){ 8 display(); 9 this->display(); 10 } 11 private: 12 virtual vo

区别&lt;指针、指针的地址、指针的值&gt;

指针是指向某一个类型(内置的或者自定义的)的对象的变量. 通常我们说的“指针”,意指它所指向的对象的地址,也就是“指针的值”: 但是指针本身也是变量,也对应内存中的一块地方,因此“指针的地址”就是存储这个指针变量的内存的地址: 结合代码来看: /************************************************************************* > File Name: newd.cpp > Author: zeyuhu > Mail: [e

C/C++笔试篇-------二维指针数组、数组指针的用法

1.废话不多说,先上代码: #include <iostream> using namespace std; int main(void) { int v[2][5] = {{1,2,3,4,5},{6,7,8,9,10}}; int (*a)[5] = v; //指针数组,指针指向数组 a[5],a[5]里面是int数值 该指针等于v的地址 cout<<(*a+1)<<endl; //*a是v[0][0]的地址. 0x22fe04 cout<<(*a+2)

了解指针(4)-- 指针和结构类型

我们之前介绍了指针和数组的关系.这一节介绍指针和结构类型的关系.我们可以声明一个指向结构类型对象的指针. 例1: struct MyStruct { int a; int b; int c; }; struct MyStruct ss={20,30,40};        //创建结构对象 ss, 并把 ss 的成员初始化为 20, 30 和 40. struct MyStruct *ptr=&ss;        //创建指向这种结构的指针. int *pstr=(int*)&ss;  

不要伤害指针(3)--指针和结构类型的关系

可以声明一个指向结构类型对象的指针. struct MyStruct { int a; int b; int c; }; struct MyStruct ss = {20,30,40};//声明了结构对象ss,并把ss 的成员初始化为20,30 和40. struct MyStruct *ptr = &ss;//声明了一个指向结构对象ss 的指针.它的类型是MyStruct *,它指向的类型是MyStruct. int *pstr = (int*)&ss;//声明了一个指向结构对象ss 的