2013-05-02 42 views
3

问题在标题中给出: 我不知道为什么会发生这种情况。 有人可以告诉我这些技巧是如何工作的。一个地址如何可以存储多个值?

这里是我的代码:

#include<stdio.h> 
int main(){ 
    int a = 320; 
    char *ptr; 
    printf("%p\n",&a); 
    ptr =(char *)&a; 
    printf("%p\n",ptr); 
    printf("%d\n",a); 
    printf("%d\n",*ptr); 
    return 0; 
} 

输出:

0x7fffc068708c 
0x7fffc068708c 
320 
64 
+0

检查这个问题。有一个很好的解释http://stackoverflow.com/questions/10262217/dynamic-memory-allocation-in-c-issues – abhi 2013-05-02 07:07:25

回答

5

的实际数据在0x7fffc068708c0x00000140

这是320的十进制。

但是,如果您通过ptr =(char *)&a;访问它,那么您只能得到0x40

这是64位十进制。

6

只存储一个值。

第二个printf在该地址处取第一个char的数据值,将其提升到int,并打印结果。第一个打印整个int

320 == 256 + 64,或0x140 == 0x01 0x40

0

点,同时assingning一到PTR你说这是一个指向字符,而不是一个整数。改变和尝试

3

简单,真正做到:使用char指针,你摆脱数据的字节以上的任何附加位:

a = 320 

0x 00 00 00 00 01 40 
    |  a    | -> 0x 00000140 = 320 
         |ptr| -> 0x 40  = 64 

你“看”两个值,因为你没有全部使用您可以使用的精度。

如果您使用短而不是字符,您将会“看到”一个值,但实际上,它只是您如何解释数据

相关问题