2012-04-25 100 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;