OpenEdv-开源电子网

 找回密码
 立即注册
查看: 2537|回复: 0

关于c语言指针应用的一些疑问?

[复制链接]

2

主题

2

帖子

0

精华

新手入门

积分
15
金钱
15
注册时间
2021-2-21
在线时间
3 小时
发表于 2021-3-1 14:48:15 | 显示全部楼层 |阅读模式
具体代码如下
static lv_mem_ent_t * ent_get_next(lv_mem_ent_t * act_e)
{
lv_mem_ent_t * next_e = NULL;

if(act_e == NULL) { /*NULL means: get the first entry*/
next_e = (lv_mem_ent_t *)work_mem;
}
else { /*Get the next entry */
uint8_t * data = &act_e->first_data;
next_e = (lv_mem_ent_t *)&data[act_e->header.s.d_size];

if(&next_e->first_data >= &work_mem[LV_MEM_SIZE]) next_e = NULL;
}

return next_e;
}

//--------------------------------------------------------------------------------------------------
其中 lv_mem_ent_t 定义如下
typedef union {
struct {
MEM_UNIT used : 1; /* 1: if the entry is used*/
MEM_UNIT d_size : 31; /* Size of the data*/
} s;
MEM_UNIT header; /* The header (used + d_size)*/
} lv_mem_header_t;

typedef struct {
lv_mem_header_t header;
uint8_t first_data; /*First data byte in the allocated data (Just for easily create a pointer)*/
} lv_mem_ent_t;
//-------------------------------------------------------------------------------------------------------------
关于 work_mem的定义如下
static uint8_t * work_mem;
//-------------------------------------------------------------------------------------------------------------
我的具体问题如下
1.work_mem为uint8_t指针类型,lv_mem_ent_t为不同类型指针(为复合union结构指针)
当执行next_e = (lv_mem_ent_t *)work_mem;(nex_e为lv_mem_ent_t指针)
那么work_mem是如何转变成lv_mem_ent_t指针的,多说指针多是固定32位,转换后work_mem
转变成什么了呢,指向lv_men_ent_t的头一个成员变量地址吗?
2. uint8_t * data = &act_e->first_data; //定义一个uint8_t指针data,并把act_e->first_data的地址去
给data,这样的理解没问题吧?
3.next_e = (lv_mem_ent_t *)&data[act_e->header.s.d_size];
3.1data为uint8_t指针变量且第二个问题中把act_e->frist_data地址已经给了data,
而现在 (lv_mem_ent_t *)&。作用是强制转换取得的地址吗?
3.2整个句子是怎么顺序呢,其中有多个单目运算符,有的是从左往右,有的相反这里有什么好的技巧
方法可以指教下小白本人吗?
3.3 data[act_e->header.s.d_size],data不管作为uint8_t还是被强制转换成lv_mem_ent_t 指针
多是单一指针,而现在加了[]是不是变成指针数组了?
4. if(&next_e->first_data >= &work_mem[LV_MEM_SIZE])
&next_e->first_data以及&work_mem这两个多是取地址吗?那这里是在比较地址大小吗?如果比较的是地址大小有意义吗?
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-6-10 04:18

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表