问题描述
我现在正在研究指针,并且试图了解事物在内存中的外观,因此尝试构建此程序。它的目标是获取一个整数,在内存中打印其地址,然后在每个字节上打印其整数值。因此对于整数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++;
}
}