牛逼是这么用的【C/C++】获取函数地址并调用
1218 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++类里的一个函数,好牛逼。
全部评论