如何解决在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 举报,一经查实,本站将立刻删除。