首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >uint8_t指针地址增加4而不是1

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

Stack Overflow用户
提问于 2021-04-29 07:03:15
回答 2查看 145关注 0票数 0

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

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

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

我有什么办法解决它吗?

编辑:对不起,我的解释有点不对。

代码语言:javascript
复制
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;
}

结果是:

代码语言:javascript
复制
Address: 00DBF904
Address: 00DBF908

编辑:谢谢你的回答。这就是解决我的问题的方法:

代码语言:javascript
复制
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;
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-04-29 07:10:42

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

代码语言:javascript
复制
printf("Address: %p\n", list);
printf("Address: %p\n", list + 1);

如果确实希望将1添加到指针值中,则可以在添加之前将其转换为void*

代码语言:javascript
复制
printf("Address: %p\n", &list);
printf("Address: %p\n", ((void*)&list) + 1);
票数 1
EN

Stack Overflow用户

发布于 2021-04-29 07:21:57

变量list是一个指针,&list是指向list的指针,所以如果您想要增加地址,可以直接使用list+1

代码语言:javascript
复制
printf("Address: %p\n", list);
printf("Address: %p\n", list + 1);

如果您想获得值,只需使用*(list),然后增加地址。

代码语言:javascript
复制
printf("Address: %d\n", *list);
printf("Address: %d\n", *(list+1));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67312488

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档