微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

打印整数变量占用的所有字节的地址

如何解决打印整数变量占用的所有字节的地址

这是代码-

#include <stdio.h>
int main()
{
    char character_1 = '0';
    int integer_1 = 12321;
    char character_2 = '1';
    char character_3 = '2';

    printf("Integer occupies %zu byte(s) of space.\n",sizeof(int));
    printf("Address of Integer 1: %p\n",(void*)&integer_1);
    printf("\n");

    printf("Character occupies %zu byte(s) of space.\n",sizeof(char));
    printf("Address of Character 1: %p\n",(void*)&character_1);
    printf("Address of Character 2: %p\n",(void*)&character_2);
    printf("Address of Character 3: %p\n",(void*)&character_3);
    printf("\n");
    return 0;
}

以及生成输出 -

Integer occupies 4 byte(s) of space.
Address of Integer 1: 000000000061FE18

Character occupies 1 byte(s) of space.
Address of Character 1: 000000000061FE1F
Address of Character 2: 000000000061FE17
Address of Character 3: 000000000061FE16

我想打印整型变量integer_1占用的所有四个字节空间的地址,这意味着打印所有这四个-{ {1}}、000000000061FE18000000000061FE19000000000061FE1A。我该怎么做?

解决方法

您需要将 int 指针强制转换为 char 指针(或 int8_t 指针),然后逐步遍历每个字节,如下所示:

char *cp = (char*)&integer_1;
for (int i = 0; i < sizeof(integer_1); ++i)
    printf("Address of integer_1,byte %d: %p\n",i,cp++);
,

这是你想要做的吗?

#include <stdio.h>

int main()
{
    int integer_1 = 12321;
    unsigned char* p = (unsigned char*)&integer_1;
    
    for (int i=0; i<sizeof(int); i++){
        printf("Address: %p -> Value: %02hhx\n",p+i,*(p+i));
    }
    return 0;
}

编辑:正如 KPCT 所指出的,使用 void* 确实是可能的,如果您也对指向的值感兴趣,而不仅仅是地址,那就有点乏味了。

例如,将我的上述解决方案调整为使用 void*,会导致类似这样的结果

#include <stdio.h>

int main()
{
    int integer_1 = 12321;
    void* p = (void*)&integer_1;
    
    for (int i=0; i<sizeof(int); i++){
        printf("Address: %p -> Value: %02hhx\n",*((char*) p+i));
    }
    return 0;
}

无论如何你都必须通过演员表到 char*

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。