好吧,我认为标题足够描述(但令人困惑,抱歉).
我正在读这个库:Timer1.
在头文件中有一个指向函数的公共成员指针,如下所示:
class TimerOne
{
public:
void (*isrCallback)();
};
Run Code Online (Sandbox Code Playgroud)
存在TimerOne类的实例化对象,称为"Timer1".
Timer1调用该函数如下:
Timer1.isrCallback();
Run Code Online (Sandbox Code Playgroud)
这怎么回事?我熟悉通过使用dereference运算符通过函数指针调用函数.
例如:
(*myFunc)();
Run Code Online (Sandbox Code Playgroud)
所以我希望通过对象的上述调用更像是:
(*Timer1.isrCallback)();
Run Code Online (Sandbox Code Playgroud)
那么,通过函数指针调用函数的可接受选项是什么,作为独立的函数指针和对象的成员?
我对书中的这段代码很困惑:
typedef int (*healthCalcFunc) (const GameCharacter&)
Run Code Online (Sandbox Code Playgroud)
我明白,这
typedef double* PDouble意味着这个词PDouble可以用来声明一个指针double.
但我无法弄清楚其含义 typedef int (*healthCalcFunc) (const GameCharacter&)
有人能帮我解释一下吗?
提前致谢
:)
void (^block)();
void (^block1)(int);
Run Code Online (Sandbox Code Playgroud)
第一行声明一个块.
第二行声明一个带整数参数的块.
现在我想要一个接受另一个块作为参数的块:
void (^block2)(<another block>);
Run Code Online (Sandbox Code Playgroud)
我该怎么办?
我了解以前曾问过类似的问题和答案。我已经了解了函数指针的概念及其声明的含义。以下是我的函数指针的示例代码,在这里我分配了函数指针fp_GetBiggerElement以指向该函数GetBiggerElement
#include <iostream>
typedef int (*fp_GetBiggerElement) (int, int);
// ^ ^ ^
// return type type name arguments
using namespace std;
int GetBiggerElement(int arg1, int arg2)
{
int bigger = arg1 > arg2 ? arg1 : arg2;
return bigger;
}
int main()
{
fp_GetBiggerElement funcPtr = GetBiggerElement;
int valueReturned = funcPtr(10, 20);
cout << valueReturned << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我的理解是,typedef意味着为类型赋予新的定义。通常,该typedef语句需要two-parts(或说两个参数)
第一部分是需要新别名的类型
第二部分是新的别名
typedef unsigned int UnsignedInt; …Run Code Online (Sandbox Code Playgroud)我在一些代码中遇到了一个typedef,它是这样的:
typedef void (NE_API *NeWindowProcCallback)(void* hWnd, NEuint uMsgId, NEuint wParam, NEuint64 lParam);
Run Code Online (Sandbox Code Playgroud)
但是,我不熟悉这种语法.谁有人解释这个?
另外,如果我跳到NE_API的声明,我发现:
# define NE_API __stdcall
Run Code Online (Sandbox Code Playgroud)
我认为这可能与答案有关,对此的解释也将非常感激.谢谢.
在C语言中,可以定义一个函数指针,但是指针指向的对象是否有“类型名”?
详细地说,不是void (*fubar)(void)可以有一个类型定义,而是可以将其声明fubar为Frob* fubar?
定义结构体有两种主要方式:
struct triangle_s {
int a,b,c;
};
Run Code Online (Sandbox Code Playgroud)
和
typedef struct triangle_s {
int a,b,c;
} triangle;
Run Code Online (Sandbox Code Playgroud)
已经被问过很多次了,但每个答案都是关于struct在使用typedef变体时不必写这么多次。除了您可以避免重复struct关键字之外,还有真正的区别吗?我听说你永远不应该typedef在 C 中使用这个变体,但没有人说为什么。
我正在使用一个故意混淆的代码,其中包含一个我无法理解的奇怪的typedef.任何人都可以解释以下typedef意味着什么:
typedef void (*p_t)(char* a1, char* a2, int a3);
Run Code Online (Sandbox Code Playgroud)
后来主要使用如下:
int main(void) {
p_t p = &some_function;
p("foo", "bar", 42);
}
Run Code Online (Sandbox Code Playgroud) 我正在可视化Mandelbrot集以及其他一些分形,并且有很多重复的代码,但是没有代码重用。
我正在使用的功能之一如下:
/**
* determines whether a pixel lies in the set
* @params x, y - x and y coordinates on R/I axes
* @param c - a complex number
*/
void calculateSet(int x, int y, Complex c) {
Complex z = c.clone();
int n = 0;
for (; n < maxDepth; n++) {
if (z.dis() > 4) { break; }
z = z^2 + c;
}
// some code using n to color the set
}
Run Code Online (Sandbox Code Playgroud)
这遵循Mandelbrot集:
z_(n+1) …Run Code Online (Sandbox Code Playgroud) 根据我的理解,typedef语法是:
typedef existing_type new_type_name;
Run Code Online (Sandbox Code Playgroud)
但是,在Chrome的v8命名空间中,有许多typedef似乎与其他语法一起使用.例如,
typedef void(* FunctionCallback )(const FunctionCallbackInfo< Value > &info)
Run Code Online (Sandbox Code Playgroud)
有两点我不明白:
1- FunctionCallbackInfo <Value>是在命名空间中定义的类,而FunctionCallback不是; 应该是先存在的现有类型?
2-没有空格分隔existing_type和new_type_name
读取它的正确方法是什么?
编辑:我正在学习本教程中的所有typedef信息.
c++ ×6
typedef ×4
c ×3
function ×2
pointers ×2
c++03 ×1
class ×1
expression ×1
objective-c ×1
polymorphism ×1
struct ×1
syntax ×1
v8 ×1