2014-10-08 73 views
-4
int main(){ 
    int a = 330; 
    char *p; 
    p = (char *) &a; 
    printf("%d",*p); 
    return 0; 
} 

这是怎么回事74? Plz解释?代码示例的输出

http://codepad.org/TVeJhU1w

+0

为什么你认为它不会是74?你了解代码吗?如果不是,你读过一本书或教程解释它?如果不是,为什么不呢? – nvoigt 2014-10-08 06:44:27

+0

那你以为是什么时候呢? – 2014-10-08 06:45:28

+0

[这个链接会给你答案的答案](http://www.c4learn.com/c-programming/pointer-arithmatics-pre-requisites/) – 2014-10-08 06:45:30

回答

2

如果整数为4个字节,有4层字符的在它。试着去了解这段代码的输出:

int main() { 
    int a =330, i; 
    char *p; 

    printf("%08x\n", a); 
    p=(char *)&a; 
    for (i = 0; i < sizeof(int); i++) { 
     printf("%02x ", p[i]); 
    } 
    printf("\n"); 
    for (i = 0; i < sizeof(int); i++) { 
     printf("%02d ", p[i]); 
    } 
    printf("\n"); 
    return 0; 
} 

打印:

0000014a 
4a 01 00 00 
74 01 00 00 
+2

现在继续解释小端和大端;-))。 – 2014-10-08 06:50:15

0

在这里,您使用的是字符指针指向一个整型变量。 由于字符只是一个字节,你会得到74。 如果你用了一个整数指针,那么你就已经得到330

330 in binary is : 0000 0001 0100 1010 

你在这里看到的值

74 : 0100 1010(1byte)