牛逼是这么用的【C/C++】获取函数地址并调用

830 2022-08-27 08:41

通过获取函数地址和声明函数指针的方法调用函数,具体使用如下:

void func(){ cout << "func()" << endl; }
int main()
{
    int addr = (int)func;//保存函数地址
    ((void(*)())addr)();//调用

    void (*ptr)();//声明函数指针
    ptr = func;//指针赋值
    ptr();//调用

    return 0;
}//输出结果为两行func()


————————————————
版权声明:本文为CSDN博主「Ananbei」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Ananbei/article/details/81118284

 

今天看Three Ways To Read A PWM Signal With Arduino(通过 arduino 读取 PWM 的三种方法)的时候,想到了自己购买的平衡车上,有一段代码:

    AccelZeroOffsent.x = ax_zero/200;
    AccelZeroOffsent.y = ay_zero/200;
    AccelZeroOffsent.z = az_zero/200;
    GyroZeroOffsent.x = gx_zero/200;
    GyroZeroOffsent.y = gy_zero/200;
    GyroZeroOffsent.z = gz_zero/200;
 /*   Serial.println("AccelZeroOffsent :");
    Serial.println(AccelZeroOffsent.x);
    Serial.println(AccelZeroOffsent.y);
    Serial.println(AccelZeroOffsent.z);
    Serial.println("GyroZeroOffsent :");
    Serial.println(GyroZeroOffsent.x);
    Serial.println(GyroZeroOffsent.y);
    Serial.println(GyroZeroOffsent.z);
*/
    attachPinChangeInterrupt(EncoderLeftPinA, *((void (*)(void))(&EncoderLeftCount)), CHANGE); // 不能说是一般的牛逼,这里通过获取函数地址的方法调用函数,读出了转速
    attachPinChangeInterrupt(EncoderRightPinA, *((void (*)(void))(&EncoderRightCount)), CHANGE);

用C语言格式调用了C++类里的一个函数,好牛逼。

全部评论

·