uint8_t指针地址增加4而不是1

uint8_t pointer address increases by 4 instead of 1

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

我有一个列表,其中每个元素都有一个字节。然后我想通过地址逐字节访问内容。但是地址一直增加4个字节。

当列表初始化为 4 字节类型时,我知道这个问题。

有什么解决办法吗?

编辑:抱歉我的解释有点错误。

int main() 
{   
    uint8_t* list;
    list = (uint8_t*)calloc(32, sizeof(uint8_t));
    printf("Address: %p\n", &list);
    printf("Address: %p\n", &list + 1);

    return 0;
}

结果是:

Address: 00DBF904
Address: 00DBF908

编辑: 感谢您的回答。这是我的问题的解决方案:

int main() 
{   
    uint8_t* list;
    list = (uint8_t*)calloc(32, sizeof(uint8_t));
    printf("Address: %p\n", &list);
    printf("Address: %p\n", (uint8_t*)&list + 1);
    

    return 0;
}

list 已经是一个指针(指向 uint8_t,大小为 1Byte),并且 &list 指向该指针(指向指针,大小为 4Bytes)。使用指针算术加一意味着增加指向的数据类型的大小。当您将其更改为:

时,添加应该会按预期工作
printf("Address: %p\n", list);
printf("Address: %p\n", list + 1);

如果你真的想给指针值加 1 你可以在添加之前将它转换为 void*:

printf("Address: %p\n", &list);
printf("Address: %p\n", ((void*)&list) + 1);

变量list是一个指针,而&list是指向list的指针,所以如果要增加地址,可以直接使用[=15] =].

printf("Address: %p\n", list);
printf("Address: %p\n", list + 1);

而如果你想得到值,只需要使用*(list)然后增加地址。

printf("Address: %d\n", *list);
printf("Address: %d\n", *(list+1));