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

在C中打印出字节的值及其地址

如何解决在C中打印出字节的值及其地址

我现在正在研究指针,并且试图了解事物在内存中的外观,因此尝试构建此程序。它的目标是获取一个整数,在内存中打印其地址,然后在每个字节上打印其整数值。因此对于整数4对(地址,值)。但是,由于得到这样的奇怪结果,我的工作结果相当混乱。如果有人可以解释我在做什么错,那将不胜感激。对于上下文,我从一个类中了解了一些有关计算机体系结构和内存的信息

输入一个整数:287

0x7ffd455a7474 31

0x7ffd455a7475 1

0x7ffd455a7476 0

0x7ffd455a7477 0

#include <stdio.h>

void byte_value(int *);
int main(){

    int n =1;
    printf("Enter an integer: ");

    if (scanf("%d",&n) == 1)

        byte_value(&n);

    

    return 0;  

}

void byte_value(int *p) {
    char *p2=((char *)p);
    char *max=p2+sizeof(int);
    for(;p2<max;p2++){
            printf("%p %u\n",p2,*p2);
    }

    return;

}

解决方法

我认为这个版本可能会解释更多。 (十六进制值非常方便)

void byte_value(void *,size_t);
int main(void)
{

    int n =1;
    printf("Enter an integer: ");

    if (scanf("%d",&n) == 1)
        printf("\n------------\nentered: %d (0x%x)\n",n,(unsigned)n);
        
        byte_value(&n,sizeof(n));
}

void byte_value(void *ptr,size_t size) 
{
    unsigned char *p = ptr;
    while(size--)
    {
        printf("%p - %03u (0x%02x)\n",(void *)p,*p,*p);
        p++;
    }
}

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