C语言语句分析

2019-07-20 02:41发布

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?

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
11条回答
edmund1234
2019-07-20 05:09
本帖最后由 edmund1234 于 2019-4-9 23:30 编辑
lafayet 发表于 2019-4-9 20:47
比如    AgvState* pAgvState = pParamsFeedback->pState; 结构体AgvState没有声明对象,只是用指针指向 ...

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了


在整个收发系统里, 是有创建对象的, 但如果说, 你只是写接收方的代码时, 你会觉得你从来没创建过对象, 但又能产生对象
这不止是在数据传送,就只在调用库函数也一样, 库函数也可以自己创建了对象, 只是给你返回此对象的指针,只是不用你创建而已




一周热门 更多>