首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

函数指针的映射.指向的函数必须是静态的吗?

函数指针的映射是指将一个函数指针指向一个静态或动态的函数。在C++中,指向的函数不必是静态的。函数指针可以指向任何具有与指针类型兼容的函数。

在C++中,函数指针可以指向静态函数或非静态函数。静态函数是指在全局作用域中定义的函数,它不依赖于任何类或对象。非静态函数是指在类或结构体中定义的函数,它依赖于类或对象。

以下是一个简单的示例,演示了如何使用函数指针指向静态和非静态函数:

代码语言:cpp
复制
#include<iostream>

class MyClass {
public:
    void nonStaticFunction() {
        std::cout << "This is a non-static function."<< std::endl;
    }
};

void staticFunction() {
    std::cout << "This is a static function."<< std::endl;
}

int main() {
    // 指向非静态函数的函数指针
    void (MyClass::*nonStaticFunctionPtr)() = &MyClass::nonStaticFunction;

    // 指向静态函数的函数指针
    void (*staticFunctionPtr)() = &staticFunction;

    // 调用非静态函数
    MyClass obj;
    (obj.*nonStaticFunctionPtr)();

    // 调用静态函数
    (*staticFunctionPtr)();

    return 0;
}

在这个示例中,我们定义了一个名为MyClass的类,其中包含一个非静态函数nonStaticFunction()。我们还定义了一个名为staticFunction()的静态函数。然后,我们使用函数指针分别指向这两个函数,并在main()函数中调用它们。

总之,函数指针的映射不必指向静态函数,它可以指向任何具有兼容类型的函数,包括非静态函数。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

指向函数指针

我们知道一段代码在内存中由地址,一个函数在编译时会被分配给一个入口地址,这个地址就是该函数中第一条指令地址,这就是函数指针。...当调用一个函数时出了通过函数名来调用之外,还可以通过指向函数指针变量来调用。切记,和一切指针变量一样,一个指向函数指针其初值也不能为空。因为它在使用之前必须被赋予一个真实地址。...(2)、(*p)两侧括号不能省,p先与*结合,表面一个指针变量,在后面的()内容结合,表示此指针变量指向函数而非变量,如果去掉,如:double *p()表示p()返回类型一个指向double型变量指针...但对于指向函数指针变量,它只能指向函数入口处而无法指向函数中某条具体指令,因此,对于p+n,p++等指针运算对于指向函数指针没有意义。...如:double (*p)(double , double); 所以,通过以上了解,我们知道了指向函数指针灵活性,一个指针变量可以调用多个不同函数,这对于程序优化和简化都起了很大作用。

1.3K60

7.4 指向函数指针

一、什么函数指针 解释:存储空间起始地址(又称入口地址)称为这个函数指针 二、用函数指针变量调用函数 (1)通过函数名调用 (2)通过指针变量访问它所指向函数 三、定义和使用指向函数指针变量...一般形式 类型名(*指针变量名)(函数参数表列) 注意: ①定义指向函数指针变量,并不意味着这个指针变量可以指向任何函数,它只能指向在定义时指定类型函数 ②如果要用指针调用函数必须先使指针变量指向函数...③在给函数入口地址赋值时,只需给出函数名而不必给出参数 ④用函数指针变量调用函数时,只需将(*p)代替函数名即可,在(*p)之后括号中根据需要写上实参 ⑤对指向函数指针变量不能进行算术运算 ⑥用函数名调用函数...,只能调用所指定一个函数,而通过指针变量调用函数比较灵活,可以根据不同情况先后调用不同函数 四、用指向函数指针函数参数 指向函数指针变量一个重要用途函数地址作为参数传递到其他函数

8163329

8.5 指向函数指针

01 什么函数指针 1、如果在程序中定义了一个函数,在编译时,编译系统为函数代码分配了一段存储空间,这段存储空间起始地址(又称入口地址)称为这个函数指针。...3、例子 int (*p)(int,int); 定义p一个指向函数指针变量,它可以指向函数类型为整型且有两个整型参数函数。p类型用int(*)(int,int)表示。...03 怎么定义和使用指向函数指针变量 1、一般形式 类型名(*指针变量名)(函数参数表列);如“int(*p)(int,int);”,这里“类型名”函数返回值类型。...2、定义指向函数指针变量,并不意味着这个指针变量可以指向任何函数,它只能指向在定义时指定类型函数。 3、如果要用指针调用函数必须先使指针变量指向函数。...04 用指向函数指针函数参数 1、指向函数指针变量一个重要用途函数地址作为参数传递到其他函数

9103029

函数内部this指向

2.this 2.1函数内部this指向 这些 this 指向当我们调用函数时候确定。调用方式不同决定了this 指向不同 一般指向我们调用者. ?...指向window 运行结果为3 fn.call(o,1,2)//此时this指向对象o,参数使用逗号隔开,运行结果为3 以上代码运行结果为: ?...指向window 运行结果为3 fn.apply(o,[1,2])//此时this指向对象o,参数使用数组传递 运行结果为3 ?...2.2.3 bind方法 bind() 方法不会调用函数,但是能改变函数内部this 指向,返回函数改变this之后产生函数 如果只是想改变 this 指向,并且不想调用这个函数时候,可以使用...; console.log(a + b); }; var f = fn.bind(o, 1, 2); //此处fbind返回函数 f();//调用新函数 this指向对象o 参数使用逗号隔开

1.7K30

函数返回值指向一个指针

函数返回值类型必须函数体内返回表达式类型相匹配。如果类型不匹配,编译器会报错。此外,C 语言中函数只能返回一个值,如果需要返回多个值,可以使用结构体或指针等方式来实现。...在 C 语言中,回调函数指一个函数指针,它作为参数传递给另一个函数,使得被调用函数可以调用传递进来函数指针来完成一些特定操作。...函数指针指一个指向函数指针变量,它存储了函数地址,可以用来调用函数函数指针定义方式与普通指针定义方式相似,只是需要在指针类型前面加上函数返回类型和参数列表。...int (*p)(int, int); 定义了一个名为 p 指向函数指针变量,这个函数返回值类型 int,有两个整型参数。这个函数指针可以指向一个具有相同返回值类型和参数列表函数。...指针作为参数传递进函数时,实际上传递指针指向内存地址,函数可以通过指针来访问、修改指针指向内存中数据。 定义了一个名为 swap() 函数,它有两个参数,都是指向整型变量指针

64220

对象this指向箭头函数this指向定义

可以看出普通函数this指向了本身对象,而箭头函数this往外层找指向了window,因为window没有name字段所以没有输出。...箭头函数使this从“动态”变成“静态”,实质内部没有this指向,继承上级对象this指向箭头函数this指向定义时外部作用域内this指向,普通函数this指向调用时根据上下文取确认.resp4...为了让后续消息能被安全加密,通信双方需要以安全方式(例如面对面)交换一个密钥,然后就可以使用这个密钥进行安全通信了。这就给通信带了困难,很多时候可能不方便这样面对面的交流。...更致命,如果需要与多个人通信,与每个人都要重复一遍这个过程,而且交换密钥都不能相同。这样交换密钥和管理密钥成本都很高,甚至不可行。...3.无法作为构造函数 箭头函数作为匿名函数,没有prototype,没有自己this指向,因此不能使用new构造函数非对称加密密钥不是一个,而是一对。

1.2K40

函数指针定义方式,和指针函数区别,函数指针数组

printf("%d+%d", a, b); } void test() { //函数指针定义三种方式 //1.先定义出函数类型,再通过函数类型定义指针变量 typedef void(FUNC_TYPE...CRT_SECURE_NO_WARNINGS #include void fun1(int a, int b) { printf("%d+%d", a, b); } void test() { //函数指针定义三种方式...//2.先定义出函数指针类型,再通过类型定义函数指针变量 typedef void(*FUNC_TYPE)(int, int); FUNC_TYPE func = fun1; func...CRT_SECURE_NO_WARNINGS #include void fun1(int a, int b) { printf("%d+%d", a, b); } void test() { //函数指针定义三种方式...以上三种方式:第三种使用率最高 函数指针指针函数区别 函数指针指向函数指针—void(*p)(int,int)=fun1; 指针函数函数返回值指针—int * fun1(int *a){return

1.2K10

this 指向3 — 函数this

本文继续讨论 this 指向 问题,今天讨论: 函数this 0 1 箭头函数 箭头函数忽略任何形式this指向改变....当在严格模式下,test打印还是为window, test2 则打印undefined 箭头函数this ,不是谁调用就指向谁 示例2: obj.test=()=>{ console.log...this 作用域, 指向外层非箭头函数作用域this 另注: 箭头函数一定不能一个构造器....bind bind() 方法创建一个新函数,在 bind() 被调用时,这个新函数 this 被指定为 bind() 第一个参数,而其余参数将作为新函数参数,供调用时使用。...总结: call、apply、bind 三个方法都可以改变函数中this 指向 call、apply :立即执行 bind 返回一个新函数 var obj={ name:'sunshine',

29710

C++ this指针:用于在成员函数指向调用该函数对象

C++中this指针一个指向当前对象指针。在成员函数中,可以使用this指针来访问调用该函数对象成员变量和成员函数。...一、定义和使用this指针 this指针在成员函数内部定义一个常量指针。它存储了当前对象地址,可以通过它访问当前对象成员变量和成员函数。...二、作为返回值this指针 this指针可以作为返回值返回。这种情况下,返回指向调用该函数对象指针。为了实现这个功能,需要将返回类型设置为类引用或指针类型。...,返回指向调用该函数对象指针。...四、总结 this指针在C++中一个非常重要概念,可以用来访问调用该函数对象,作为返回值返回,或者作为函数参数传递。掌握this指针使用可以帮助我们更好地编写面向对象程序。

18040

accept 函数_accept函数阻塞

大家好,又见面了,我你们朋友全栈君。 服务器要做最普通事情之一就是接受来自客户端连接请求。在套接字上使用重叠I/O接受连接惟一API就是AcceptEx()函数【注一】。...有趣,通常同步接受函数accept()返回值一个新套接字,而AcceptEx()函数则需要另外一个套接字作为它参数之一。...-发出一个 AcceptEx 请求 }while(TRUE); 作为一个高响应能力服务器,它必须发出足够AcceptEx调用,守候着,一旦出现客户端连接请求就立刻响应。...这样可能很有用,但是也可能会引发问题,因为AcceptEx()必须等全部客户端数据都收到了才返回。...要预防此类攻击,接受连接线程应该不时地通过调用getsockopt()函数(选项参数为SO_CONNECT_TIME)来检查AcceptEx()里守候套接字。

1.1K20

函数指针定义 函数指针具体作用

在C语言中,有一个大家必须要认识东西——函数指针。那么这究竟是一个什么方法?这个有什么作用?下面就来为大家介绍一下。...image.png 一、函数指针一种变量 通常所指函数指针在实质上就是一种变量,这是一种指向函数变量。...与指针变量相似,都是可以指向一定数值;但二者之间又有差别,指针变量所指向一些字符型、数组等,另一种则是指向函数。这实际上就相当于一种对函数进行引用方法。...与指针函数相比,差别就在于指针函数本质上一种函数,只不过一种返回型指定某一类函数。所谓指针,就是函数地址。...以上就是为大家简要地介绍了函数指针定义及其具体作用,相信大家已经了解到了很多,尤其对其作用。运用好了这个方法可以给编程带来很多方便。

1.8K30

函数指针指针函数学习小结

函数指针指向函数指针指针函数指一个函数返回值一个指针,但下面的几道题还是感觉很迷惑。各位能否讲详细点呢? (1) float(**def)[10]   def是什么?...(3) f10个元素构成数组, 每个元素指针, 指针指向函数, 函数类型为无参数且返回值为double. 下面要讲窍门例子跟这个很类似....知道了a[3]类型,就知道了a元素类型。 a[3]是什么类型?指针,因为它前面有*. 由此可知,数组a元素指针。 光说是指针还不够。对于指针必须说出它指向东东是什么类型。...这个特殊指针指向一个返回整型值函数指针声明必须和它指向函数声明保持一致。 指针名和指针运算符外面的括号改变了默认运算符优先级。...但是因为*运算符高于++运算符,所以圆括号在这里必须,如果没有圆括号,那么++运算符将作用于二重指针fpp上。 四、指向指针数组指针 指针指针另一用法旧处理指针数组。

1.1K20

c++系列之二 指向成员函数指针(烧脑)

,原文详细解释了C++中指向成员函数指针,因为带有“教程”一词,所以比较通俗易懂。...因为成员函数可以静态绑定(并不是总能静态绑定,待会儿讨论),所以它们地址在编译阶段决定(同样并不是永远如此)。直观地讲,应该有一种方法可以保存成员函数地址。...*fptr 绑定fptr到对象obj,而 ->*fptr 则绑定fptr到指针p所指向对象。(还有一个 重要区别 :我们可以重载后者,却不能重载前者)。在 (obj....所以,静态成员函数不是类一部分,成员函数指针语法对常规函数指针并不成立,例如上面例子中静态成员函数指针。...我们可以将一个指向派生类指针赋值给一个指向其基类指针(即"is-a"关系),而所谓“逆变性规则”(翻译君:不知道啥,原文contravariance rule)正是这种规则反面。

2.8K20

必须知道指针基础-7.void指针函数指针

二、函数指针 2.1 指向函数指针—.NET中委托原型   我想用过.NET中委托童鞋,对于函数指针应该不会陌生,它是委托原型。...函数指针一个指向函数指针,我们可以在C中轻松地定义一个函数指针: typedef void (*intFunc)(int i);   这里我们定义了一个无返回值,只有一个int类型参数函数指针intFunc...); }   最终运行结果如下图所示,执行函数指针f1即执行了其所指向具体函数: ?...,我们定义了一个intFunc函数指针,printNum函数满足intFunc定义一个具体函数。...其所指向函数应该是一个返回值为int类型,参数为两个void指针

91620
领券