我刚刚重新开始编码,遇到了一个无法解决的问题。
我有一个列表,其中每个元素都有一个字节。然后我想按地址逐字节访问内容。但是地址不断增加4个字节。
当列表被初始化为4字节类型时,我知道这个问题。
有什么想法我该怎么解决吗?
编辑:对不起,我的解释有点错误。
int main()
{
uint8_t* list;
list = (uint8_t*)calloc(32, sizeof(uint8_t));
printf("Address: %pn", &list);
printf("Address: %pn", &list + 1);
return 0;
}
结果是:
Address: 00DBF904
Address: 00DBF908
编辑:谢谢你的回答。这就是我的问题的解决方案:
int main()
{
uint8_t* list;
list = (uint8_t*)calloc(32, sizeof(uint8_t));
printf("Address: %pn", &list);
printf("Address: %pn", (uint8_t*)&list + 1);
return 0;
}
list
已经是一个指针(指向uint8_t
,大小为1字节(,而&list
指向该指针(指向指针,大小为4字节(。使用指针算法添加一意味着添加所指向的数据类型的大小。当您将其更改为:时,添加应该如您所期望的那样工作
printf("Address: %pn", list);
printf("Address: %pn", list + 1);
如果你真的想给指针值加1,你可以在加之前把它强制转换成void*
printf("Address: %pn", &list);
printf("Address: %pn", ((void*)&list) + 1);
变量list
是一个指针,&list
是指向list
的指针,所以如果您想增加地址,可以直接使用list+1
。
printf("Address: %pn", list);
printf("Address: %pn", list + 1);
如果你想得到这个值,只需使用*(list)
,然后增加地址。
printf("Address: %dn", *list);
printf("Address: %dn", *(list+1));