typedef struct IMainTask
{
void (*RunMainTask)(struct IMainTask* pThis, SerialPortBase* pSerialPort);
BaseTask* pBaseTask;
} IMainTask;
IMainTask* GetMainTask(const uint8_t* msgs){...}
IMainTask* pMainTask = GetMainTask(msgs);
pMainTask->RunMainTask(pMainTask, pSerialPort);
1)pMainTask是指向IMainTask的,函数GetMainTask(msgs)返回应该是地址值,是把一个地址给了这结构体吗?
2)pMainTask->RunMainTask(pMainTask, pSerialPort); 中pMainTask可以访问RunMainTask?怎么理解 pMainTask又指回了自己IMainTask?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
8#,9# 都一起回吧
其实这都是我说的隐性创建对象, 例如 发送方
typedef struct {
int a;
float b;
}ABC;
ABC abc; // 创建了ABC的对象
USART_Send((u8*)&abc, sizeof(abc)); // 在发送的时候它被转换至字节的类型
在接收方, 同样要定义同一个ABC的结构体
typedef struct {
int a;
float b;
}ABC; // 但从来不用创建此结构体的对象
USART_Rx((u8*)RxData, sizeof(ABC)); // 接收到类型是字节的数据
ABC* abc = (ABC*)RxData; // 虽然你从没创建过ABC的对象, 但你现在有了ABC的对象abc了
在整个收发系统里, 是有创建对象的, 但如果说, 你只是写接收方的代码时, 你会觉得你从来没创建过对象, 但又能产生对象
这不止是在数据传送,就只在调用库函数也一样, 库函数也可以自己创建了对象, 只是给你返回此对象的指针,只是不用你创建而已
一周热门 更多>