【问题标题】:How can one address can store more than one value?一个地址怎么能存储多个值呢?
【发布时间】:2013-04-26 06:29:26
【问题描述】:

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

这是我的代码:

#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

【问题讨论】:

标签: c pointers


【解决方案1】:

0x7fffc068708c 的实际数据是0x00000140

这是十进制的 320。

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

这是十进制的 64。

【讨论】:

    【解决方案2】:

    只存储一个值。

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

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

    【讨论】:

      【解决方案3】:

      关键是在将 a 分配给 ptr 时,您说它是指向字符而不是整数的指针。改变它并尝试

      【讨论】:

        【解决方案4】:

        真的很简单:使用char 指针,您可以删除一个字节以上的任何额外数据位:

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

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

        如果您使用的是 short 而不是 char,您将“看到”一个值,但实际上,这只是 您解释数据的方式。

        【讨论】:

          猜你喜欢
          • 2019-04-22
          • 1970-01-01
          • 2014-05-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-01-17
          • 2022-11-25
          相关资源
          最近更新 更多