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));
我刚开始重新编码,遇到了一个我无法解决的问题。
我有一个列表,其中每个元素都有一个字节。然后我想通过地址逐字节访问内容。但是地址一直增加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));