2012-12-25 187 views
1

我想將一個指針傳遞給一個變量。有時它會是一個整數,有時也可能是一個字符。在下面的例子中我的指針p傳遞給CreateObject但是當我嘗試檢索變量的值指針指向我得到一個尷尬的結果:c - 傳遞一個參數爲void *變量的函數指針

int i =0; 
int *p = malloc(sizeof(int)); 
*p = i; 

ObjectP object = CreateObject(p); 

說,我想將它轉換回一個int和它顯示:

void CreateObject(void *key) 
{ 
    printf("%d\n", (int)key); 
} 

我得到:160637064而不是0我收到的,而不是我以前分配的整數什麼和如何檢索它,而不是當前值的?

+1

而且,出於好奇,你怎麼打算區分元素的傳入的大小?另一個參數? – sidyll

回答

6

此:

(int) key 

不取消引用指針來訪問它指向,它重新解釋指針值(地址)中的數據本身作爲整數。

您需要:

printf("%d\n", *(int *) key); 
3

你類型轉換的指針爲整數。這意味着你只需獲得地址。畢竟,指針只是一個地址。

您可能想取消引用指針而不是轉換它。 *(int*)key會這樣做。

3

您正在打印指針,即。地址,而不是它指向的值。

使用該打印值:

void CreateObject(void *key) 
{ 
    printf("%d\n", *(int*)key); 
} 
相關問題