十六进制值通过不同实例中的char指针使用不同的填充进行打印

时间:2014-09-25 06:04:29

标签: c++ c

#include<stdio.h>
int main()
{
    unsigned int a=0xabcdef12;
    char *c=(char *)&a;
    int i;
    for(i=0;i<4;i++)
    {

        printf("%x.....%x\n",*c,c);
        c++;
    }
    return 0;
}

O / P:

12.....bfad5bd4
ffffffef.....bfad5bd5
ffffffcd.....bfad5bd6
ffffffab.....bfad5bd7

如果您在第一次打印时看到它正在打印12,但在所有后续打印中,它打印的值正确,但用ffffff填充。有人可以解释这个差异吗?

1 个答案:

答案 0 :(得分:0)

你在乱搞指针。小心那里。这条线

char *bit_longer_name=(char *)&a;

表示“指向CHAR类型数据数组的gimme指针,并将其称为'bit_longer_name'。数组在变量'a'地址处初始化”。现在当你做

bit_longer_name++

它实际上将指针向前移动到内存中 - 转到数组中的下一个元素 - 就像my_char_array [i]那样。你有那里的印刷品:

printf("%x.....%x\n",*c,c);

第一部分打印“我指向的当前数组单元格的值”,你实际上传递了printf的无效值(你应该从那里得到警告!),这会导致编译器从中读取记忆点由'c'指示( - &gt;它首先工作)。

另一方面,第二部分是“我用'c'指向的地址”,正如你所见,它向前移动。