2013-05-02 28 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 

你「看」兩個值,因爲你沒有全部使用您可以使用的精度。

如果您使用短而不是字符,您將會「看到」一個值,但實際上,它只是您如何解釋數據