2012-04-25 104 views
-1

我想轉換指針'p'的類型。開始,指針p的類型是無效的。爲它分配四個字節的內存後,我將指針類型轉換爲'int',但是這不起作用。也許句子​​p=(int *)p不起作用。
請告訴我爲什麼,並解決問題。謝謝。
編碼:如何轉換指針的類型

#include<stdio.h> 
#include <stdlib.h> 

int main(void) 
{ 
    void *p; 
    p=malloc(sizeof(int)); 
    if(p == NULL) 
    { 
     perror("fail to malloc"); 
     exit(1); 
    } 
    p=(int *)p; 
     *p=100; 
    printf("the value is : %d\n",*p); 

    return 0; 
} 

回答

3

你可以更輕鬆地直接把由malloc返回的空指針的int*

#include<stdio.h> 
#include <stdlib.h> 

int main(void) 
{ 
    int *p; 
    p = malloc(sizeof(int)); 
    if(p == NULL) 
    { 
     perror("fail to malloc"); 
     exit(1); 
    } 

    *p=100; 
    printf("the value is : %d\n",*p); 

    return 0; 
} 
+1

甚至不需要走那麼遠。只要將'p'設爲'int *'而不是'void *'。 – Marlon 2012-04-25 01:41:44

+0

我知道我們正在處理一個角落案例,但我不建議發佈投射來自'malloc(3)'的返回值的代碼 - 該投射實際上可以隱藏來自編譯器的有用警告消息。 – sarnold 2012-04-25 01:47:31

+0

[不要從malloc投下返回值](http://stackoverflow.com/a/605858/241631) – Praetorian 2012-04-25 01:48:18

2

你不能改變一個變量的類型,你已經宣佈後, 。對於你的要求,你需要聲明一個單獨的int*變量,而p變量與類型投給它分配:

int *i = (int *)p; 
*i = 100; 
printf("the value is : %d\n", *i); 

或者,乾脆宣佈p作爲int*開始用,然後鍵入鑄指針返回malloc(),如@GWW所示。

1

你不能改變變量類型,你可以做一個類型轉換,但這只是暫時的。 你想要什麼就像*(int*)p = 100; printf("the value is : %d\n", *(int*)p);

1

你不能。但是你可以創建一個指向int的新指針並指向該位置,如:

void *p; 
p= malloc... 
int *pi; 
pi= p; 
*pi= 25;