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

C++传递指向静态函数的指针在执行期间改变值

在C++中,指向静态函数的指针是可以在运行时更改其值的。静态函数是一个属于类或命名空间的函数,它的作用域和生命周期与全局变量相似。

以下是一个简单的示例,展示了如何在运行时更改指向静态函数的指针的值:

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

class MyClass {
public:
    static void staticFunction1() {
        std::cout << "Static function 1 called"<< std::endl;
    }

    static void staticFunction2() {
        std::cout << "Static function 2 called"<< std::endl;
    }
};

int main() {
    void (MyClass::*staticFunctionPointer)() = &MyClass::staticFunction1;

    (MyClass().*staticFunctionPointer)(); // 调用 staticFunction1

    staticFunctionPointer = &MyClass::staticFunction2;

    (MyClass().*staticFunctionPointer)(); // 调用 staticFunction2

    return 0;
}

在这个示例中,我们定义了一个名为MyClass的类,其中包含两个静态函数staticFunction1staticFunction2。我们创建了一个指向静态函数的指针staticFunctionPointer,并将其初始化为指向MyClass::staticFunction1的指针。然后,我们在运行时将staticFunctionPointer更改为指向MyClass::staticFunction2的指针,并调用该函数。

需要注意的是,指向静态函数的指针只能指向同一个类中的静态函数。如果您尝试将指针指向不同类中的静态函数,编译器将会报错。

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

相关·内容

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

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

19940

面试中常见 C 语言与 C++ 区别的问题

定义局部静态变量 局部静态变量存储静态存储区,程序运行期间都不会释放,只声明时进行初始化,而且只能初始化一次,如果没有初始化,其自动初始化为0或空字符。...注意:编程时static记忆性和全局性特点可以使不同时期调用函数进行通信,传递信息,而C++静态成员则可以多个对象实例间进行通信,传递信息。...指针赋值如下: int a=1,b=2; int *p1=&a, *p2=&b; 这时执行p1=p2;后,p1原来指向对象v1并没有改变,而p1被赋值为p2所指向对象,如下图: ?...引用赋值如下: int a=1,b=2; int &v1=a, &v2=b; 这时执行r1= r2;改变是v1,将r 2指向对象赋值给v1,而不是引用r1本身。...不存在指向引用,但是存在指向指针

89751

面试中常见C语言与C++区别的问题

定义局部静态变量 局部静态变量存储静态存储区,程序运行期间都不会释放,只声明时进行初始化,而且只能初始化一次,如果没有初始化,其自动初始化为0或空字符。...注意:编程时static记忆性和全局性特点可以使不同时期调用函数进行通信,传递信息,而C++静态成员则可以多个对象实例间进行通信,传递信息。...指针赋值如下: int a=1,b=2; int *p1=&a, *p2=&b; 这时执行p1=p2;后,p1原来指向对象v1并没有改变,而p1被赋值为p2所指向对象,如下图: ?...指针间赋值 引用赋值如下: int a=1,b=2; int &v1=a, &v2=b; 这时执行r1= r2;改变是v1,将r 2指向对象赋值给v1,而不是引用r1本身。...指针不声明时初始化,初始化时候需要分配存储空间。 引用初始化以后不能被改变指针可以改变所指对象。 不存在指向引用,但是存在指向指针

1.1K30

C++11基础学习系列三

在所有函数体之外定义对象存在于程序整个执行过程,当程序启动时被创建,知道程序结束时被创建。 自动对象 存在于块执行期间对象,形参是一种自动对象。...函数参数传递 依据形参传递类型将函数传递,分为按引用传递和按传递,当形参为引用类型时是按引用传递,实际是传递实参别名。当实参被拷贝给形参时,形参和实参是两个互相独立对象,这是按传递。...还有一种是指针形参,指针是按传递,当执行指针拷贝时,拷贝指针。所以你可以通过指针来修改实参。...由于拷贝大类型对象或者容器对象比较低效,甚至有的类型(IO类型)是不支持拷贝,这时我们尽量采用按引用传递,这样可以避免拷贝付出代价。如果函数内无须改变参数时,最好将其声明为常量引用。...C语言中通过typedef来重命名一个类型名称,C++中通过using来,虽然typedef可以c++继续使用,但是还是建议使用using.

80640

C++经典面试题(最全,面中率最高)

9.什么时候需要使用“常引用”? 如果既要利用引用提高程序效率,又要保护传递函数数据不在函数中被改变,就应使用常引用。...描述内存分配方式以及它们区别? 1) 从静态存储区域分配。内存在程序编译时候就已经分配好,这块内存在程序整个运行期间都存在。例如全局变量,static 变量。 2) 栈上创建。...数组要么静态存储区被创建(如全局数组),要么栈上被创建。指针可以随时指向任意类型内存块。...2) 引用初始化以后不能被改变指针可以改变所指对象。 3) 不存在指向引用,但是存在指向指针。 26题:const 与 #define 比较 ,const有什么优点?...28题:内存分配方式有几种? 【参考答案】 一、从静态存储区域分配。内存在程序编译时候就已经分配好,这块内存在程序整个运行期间都存在。例如全局变量。 二、栈上创建。

1.1K30

c++面试选择题_C语言经典笔试题

9.什么时候需要使用“常引用”?  如果既要利用引用提高程序效率,又要保护传递函数数据不在函数中被改变,就应使用常引用。...描述内存分配方式以及它们区别? 1) 从静态存储区域分配。内存在程序编译时候就已经分配好,这块内存在程序整个运行期间都存在。例如全局变量,static 变量。 2) 栈上创建。...数组要么静态存储区被创建(如全局数组),要么栈上被创建。指针可以随时指向任意类型内存块。...1) 引用必须被初始化,指针不必。 2) 引用初始化以后不能被改变指针可以改变所指对象。 3) 不存在指向引用,但是存在指向指针。引用不需要判空。...第28题:内存分配方式有几种? 一、从静态存储区域分配。内存在程序编译时候就已经分配好,这块内存在程序整个运行期间都存在。例如全局变量。 二、栈上创建。

1.1K10

c++入门】引用,内联函数,auto

一旦引用被初始化为某个变量引用,它就永远引用那个变量,不会像指针那样可以改变指向变量。...通过引用参数,可以直接修改传入变量,而无需担心指针解引用和地址操作,这使得代码更加安全、清晰 但是由于引用定义后不能改变指向,引用不能替代指针 当然,这里swap函数取名字也可以取x,y,因为他们不同作用域...,传参和返回期间函数不会直接传递实参或者将变量本身直接返回,而是传递实参或者返回变量一份临时拷贝,因此用作为参数或者返回类型,效率是非常低下,尤其是当参数或者返回类型非常大时,效率就更低...它生命周期仅限于函数 func 执行期间。一旦 func 执行完毕,a所占用内存就会被释放掉,该内存区域可以被其他函数或变量复用。...执行期间

9010

C++指针变量作函数参数接收数组地址

C++指针变量作函数参数接收数组地址 C++中,用指针变量指向数组元素时要注意: 指针变量p可以指向有效数组元素,实际上也可以指向数组 以后内存单元。...在上一节小林已经讲过:数组名代表数组首元素地址,用数组名作函数参数,传递是数组首元素地址,同样用指针变量作函数形参, 也可以接收从实参传递数组首元素地址。 ...C++实际中,函数调用时并不存在一个占有存储空间形参数组,只有指针变量。...而形参数组名是指针变量,并不是一个固定地址,它是可以改变。...函数调用开始时,它接收了实参数组首元素地址,但在函数执行期间,它可以再被赋值。 8.2 C++指针变量作函数参数接收数组地址 更多案例可以go公众号:C语言入门到精通

9242218

精选 30 个 C++ 面试题(含解析)

对象创建同时要自动执行构造函数,对象消亡之前要自动执行析构函数。...9.什么时候需要使用“常引用”? 如果既要利用引用提高程序效率,又要保护传递函数数据不在函数中被改变,就应使用常引用。...数组要么静态存储区被创建(如全局数组),要么栈上被创建。指针可以随时指向任意类型内存块。...引用必须被初始化,指针不必。 引用初始化以后不能被改变指针可以改变所指对象。 不存在指向引用,但是存在指向指针。 22.基类析构函数不是虚函数,会带来什么问题?...15、this指针调用成员变量时,堆栈会发生什么变化? 当在类静态成员函数访问类静态成员时,编译器会自动将对象地址传给作为隐含参数传递函数,这个隐含参数就是this指针

56730

面试总结-C++

内存在程序编译时候就已经分配好,这块内存在程序整个运行期间都存在。例如 全局变量, static 变量 。 (2)栈上创建 。...执行函数时, 函数内局部变量存储单元都可以栈上创建 ,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器指令集。 (3)从堆上分配 , 亦称动态内存分配 。...float (*(* fp2)(int,int,int))(int); //fp2是一个指针指向一个函数函数参数为3个int,函数返回是一个指针指针指向一个函数函数参数是1个int,返回...指针常量是一个常量,指针可以改变。如int *const p。 指针和引用 区别 指针是具体变量,需要占存储空间。引用只是别名,不占用具体存储空间。...C++/C 语言没有办法知道指针所指内存容量,除非在申请内存时记住它。注意当数组作为函数参数进行传递时,该数组自动退化为同类型指针

2.1K11

C++基础闯关100题,你能闯多少?【2021超硬核大厂高频面试题】

传递给main函数,然后才真正运行main函数 main函数执行之后: 全局对象析构函数会在main函数之后执行 可以用 atexit 注册一个函数,它会在main 之后执行 3、C...,而引用在初始化之后不可再改变 sizeof指针得到是本指针大小,sizeof引用得到是引用所指向变量大小 当把指针作为参数进行传递时,也是将实参一个拷贝传递给形参,两者指向地址相同...,但不是同一个变量,函数改变这个变量指向不影响实参,而引用却可以。...引用一旦初始化之后就不可以再改变(变量可以被引用为多次,但引用只能作为一个变量引用);指针变量可以重新指向别的变量。 不存在指向引用,必须有具体实体;但是存在指向指针。...7、说一说C与C++内存分配方式? 从静态存储区域分配。内存在程序编译时候就已经分配好,这块内存在程序整个运行期间都存在,如全局变量,static变量。 栈上创建。

1.9K20

C++知识总结

*p++和(*p)++区别      *p++是先取值,然后将指针地址执行++操作      (*p)++是先取值,然后对(*p)这个进行++操作 2.枚举变量enum如何计算 enum{a...(1)局部静态变量      存储空间分配不同,auto类型分配在栈上, 属于动态存储类别, 占动态存储区空间, 函数调用结束后自动释放, 而static分配在静态存储区, 程序整个运行期间都不释放...将“引用”作为函数参数有哪些特点? (1)传递引用给函数传递指针效果是一样。...什么时候需要使用“常引用”?  如果既要利用引用提高程序效率,又要保护传递函数数据不在函数中被改变,就应使用常引用。...通过该指针变量调用此虚函数,此时调用就是指针变量指向对象同名函数。 通过虚函数指向基类对象指针变量配合使用,就能方便地调用同一类族中不同类同名函数,只要先用基类指针指向即可。

98540

C++面试题,阿里、百度、腾讯、华为、小米100道C++面试题目及答案

一.c++指针初始化一般方法: 1.将一个已经在内存中存在变量地址传递给定义指针,这个指针指向这个变量内存地址(相同数据类型),完成初始化。...int const*A;//A可变,A不可变 intconst A;//A不可变,*A可变 2、限定函数传递值参数: void function(const int Var);//传递过来参数函数内不可以改变...19、 C++函数中值传递方式有哪几种? 正确答案: C++函数三种传递方式为:传递指针传递和引用传递。 20、一般数据库若出现日志满了,会出现什么情况,是否还能使用?...内存在程序编译时候就已经分配好,这块内存在程序整个运行期间都存在。例如全局变量。 2)栈上创建。执行函数时,函数内局部变量存储单元都可以栈上创建,函数执行结束时这些存储单元自动被释放。...19、说一说C与C++内存分配方式? 正确答案: 1)从静态存储区域分配。内存在程序编译时候就已经分配好,这块内存在程序整个运行期间都存在,如全局变量,static变量。 2)栈上创建。

1.8K20

《逆袭进大厂》第二弹之C++进阶篇59问59答(超硬核干货)

但是引用或指针传递函数调用中,因为传进去是一个引用或指针,这样函数内部可以改变引用或指针指向变量,这时const 才是实实在在地保护了实参所指向变量。...顶层指针表示指针本身是一个常量 3) int const *p1或者const int *p1两种情况中const修饰*p1,所以理解为*p1不可以改变,即不可以给*p1赋值改变p1指向变量,...即只能把实参传送给形参,而不能把形参反向地传送给实参。因此函数调用过程中,形参发生改变,而实参中不会变化。...而对于指针传递参数,如果改变被调函数指针地址,它将应用不到主调函数相关变量。如果想通过指针参数传递改变主调函数相关变量(地址),那就得使用指向指针指针或者指针引用。...符号表生成之后就不会再改,因此指针可以改变指向对象(指针变量中可以改),而引用对象则不能修改。

2.3K40

指针与引用相关面试题

1.指针和引用差别? 非空区别。在任何情况下都不能使用指向引用。一个引用必须总是指向一个对象。不存在指向引用这个事实意味着使用引用代码效率会更高。 合法性区别。...但是引用则总是指向初始化时被指定对象,以后不能改变,但是指定其内容可以修改。 应用区别。以下情况应该使用指针:一是考虑到存在不指向任何对象可能,二是需要能够不同·时刻指向不同对象。...如果总是指向一个对象并且一旦指向一个对象后就不会改变指向,那么应该使用引用。 空指针和迷途指针区别是什么? 当delete一个指针时候,实际上仅是让编译器释放内存,但指针本身依然存在。...this成员函数开始前构造,成员结束后清除。当调用一个类成员函数时,编译器将类指针作为函数this函数传递过去 this指针并不占用对象空间。...this相当于非静态成员函数一个隐含参数,不占用对象空间。他跟对象之间没有包含关系,只是当前调用函数对象被它指向而已。 this成员函数开始执行前创建,成员执行结束后清除。

29950

C++笔试面试题整理

const修饰函数返回:如果给“指针传递函数返回加const,则返回不能被直接修改,且该返回只能被赋值给const修饰同类型指针。...另外,函数"adgfdf"这样字符串存放在常量区。 ? 什么时候需要使用“常引用”? 如果既要利用引用提高程序效率,又要保护传递函数数据不在函数中被改变,就应使用常引用。...什么时候需要使用“常引用”? 如果既要利用引用提高程序效率,又要保护传递函数数据不在函数中被改变,就应使用常引用。 什么函数不能声明为虚函数?...单向,非传递,不能继承。 成员函数通过什么来区分不同对象成员数据?为什么它能够区分? 答:通过this指针指向对象首地址来区分。 对象都具有的两方面特征是什么?分别是什么含义?...友元,继承,公有成员函数C++什么时候给变量分配内存 函数局部变量是函数执行前分配空间。函数执行完毕后回收空间。 静态变量是程序运行时分配空间。程序结束时回收空间。

2.5K30

C++复习大全(各种知识点)

是以传方式传递对象到函数,除非我们自己指定,否则函数参数都是以实际参数一份拷贝作为初值。...C++ 引用简介引用就是变量别名,引用基本用法和指针是相同,但是带引用函数调用比带指针函数调用在语法构成上更加清晰。引用看起来像是按传递,实际上是按地址传递。...需要了解是,不同C++编译器对class数据成员,成员函数和全局函数命名方案是不同,这是造成不同编译器之间存在二进制连接兼容性主要原因之一  C++如何处理静态成员  C++中,凡是使用...替代  define BUFSIZE 100  BUFSIZE 是一个名字,它只是预处理期间存在,因此它不占用存储空间且能放在一个头文件里,目的是为使用它所有编译但愿提供一个。 ...大部分场合使用内建数据类型情况,包括常量表达式,编译都能执行常量折叠  const 安全性  如果不想让一个改变,就应该声明成const,这不仅可以防止意外更改提供安全措施,也消除了读存储器和读内存操作

1K20

C++知识概要

static用法和作用 全局变量前加上关键字 static,全局变量就定义成一个全局静态变量。存储静态存储区,整个程序运行期间一直存在。...静态变量初始化 静态局部变量和全局变量一样,数据都存放在全局区域,所以主程序之前,编译器已经为其分配好了内存。 C++ 中,初始化是执行相关代码时才会进行初始化。...key,就将一个具有该 key 和 value 默认插入这个 map erase()函数,只能删除内容,不能改变容量大小; erase 成员函数,它删除了 itVect 迭代器指向元素,并且返回要被删除...,压栈出栈都有专门指令执行,这就决定了栈效率比较高,堆则是 C/C++函数库提供指针是什么?...this 指针调用成员变量时,堆栈会发生什么变化 当在类静态成员函数访问类静态成员时,编译器会自动将对象地址传给作为隐含参数传递函数,这个隐含参数就是 this 指针

1.1K20
领券