c-uint8_t指针地址增加了4,而不是1



我刚刚重新开始编码,遇到了一个无法解决的问题。

我有一个列表,其中每个元素都有一个字节。然后我想按地址逐字节访问内容。但是地址不断增加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));

最新更新