一个地址如何存储多个值?

时间:2013-05-02 06:50:42

标签: c pointers

问题在标题中给出: 我不知道为什么会这样。 有人能告诉我这些技巧是如何运作的。

这是我的代码:

#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

4 个答案:

答案 0 :(得分:6)

只存储了一个值。

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

320 == 256 + 640x140 == 0x01 0x40

答案 1 :(得分:5)

0x7fffc068708c的实际数据为0x00000140

这是十进制的320。

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

这是十进制的64。

答案 2 :(得分:3)

简单,真的:使用char指针,你可以摆脱一个字节以上的任何额外数据:

  a = 320

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

您“看到”两个值,因为您没有使用所有可用的精度。

如果您使用了short而不是char,那么您将“看到”一个值,但实际上,只是如何解释数据。

答案 3 :(得分:0)

关键是在为ptr分配一个时,你说它是一个指向一个字符而不是一个整数的指针。改变并尝试