-1

我想转换指针'p'的类型。一开始,指针 p 的类型是 void。在为其分配了四个字节的内存后,我将指针类型转换为 '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;
 } 
4

4 回答 4

3

您可以更轻松地将返回的 void 指针直接转换mallocint*

#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;
 } 
于 2012-04-25T01:36:55.677 回答
2

声明变量后,您无法更改变量的类型。对于您的要求,您需要声明一个单独int*的变量并p使用类型转换将变量分配给它:

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

或者,简单地声明p为 aint*开头,然后对返回的指针进行类型malloc()转换,就像@GWW 显示的那样。

于 2012-04-25T01:37:37.577 回答
1

您不能更改变量类型,可以进行类型转换,但这只是暂时的。你想要的会是这样的*(int*)p = 100; printf("the value is : %d\n", *(int*)p);

于 2012-04-25T01:38:38.137 回答
1

你不能。但是您可以创建一个指向 int 的新指针并指向该位置,例如:

void *p;
p= malloc...
int *pi;
pi= p;
*pi= 25;
于 2012-04-25T01:41:56.470 回答