【发布时间】:2020-12-06 11:33:04
【问题描述】:
我一直在寻找地址指针中的方括号是什么,但我继续没有理解它。以下是函数的几行代码,其中“id”变量是一个 uint32_t 指针,之前已作为参数传递。
#define LIST_STARTED (0x0001) /*defined out of the function*/
#define LIST_FIRST (0x0002) /*defined out of the function*/
uint32_t *pointer = id;
uint16_t *flags = &((uint16_t *)pointer)[0];
uint16_t *index = &((uint16_t *)pointer)[1];
bool started = *flags & LIST_STARTED;
bool first = *flags & LIST_FIRST;
if (!started){
/* does something */
*flags = MSEC_PRM_MGMT_LIST_STARTED;
return true;
}
if (!first){
/* does something */
*flags |= MSEC_PRM_MGMT_LIST_FIRST;
*index = 1;
return true;
}
if (*index == final_index)
/* does something */
return false;
*index += 1;
我了解函数的逻辑是什么,但我不明白以下几行是做什么的。我把“所有”代码放在上面以防万一。
uint16_t *flags = &((uint16_t *)pointer)[0];
uint16_t *index = &((uint16_t *)pointer)[1];
如果有人可以帮助我,我将不胜感激! 谢谢!
我编辑说这段 C 代码在嵌入式系统中运行良好,我没有修改它,我只是在观察它的行为。
【问题讨论】:
-
不应该
uint32_t *pointer = id;是uint32_t *pointer = &id;吗?请张贴id的声明,以便问题得到解答。 -
@Lundin 来自文本
Here are the lines of the function, where "id" variable is an uint32_t pointer that has been previously passed as an argument.我会说id的类型为uint32_t *或void *。 -
@mch 在这种情况下,请发布函数的调用方式。一个minimal reproducible example。整个代码可能是也可能不是严格的别名违规。
-
ID 为 uint32_t *id;
-
@Nkolot 并指向哪里?
标签: c pointers embedded memory-address flags