-1

ポインタ「p」の型を変換したい。はじめに、ポインタ p の型は void です。4 バイトのメモリを割り当てた後、ポインタ型を「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

mallocから返された void ポインターを直接キャストする方が簡単です。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;
 } 
于 2012-04-25T01:36:55.677 に答える
2

宣言した後で変数の型を変更することはできません。あなたが求めていることについては、別の変数を宣言し、型キャストで変数をそれにint*割り当てる必要があります。p

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

または、@GWW が示したように、単純pに として宣言し、int*によって返されたポインタを型キャストします。malloc()

于 2012-04-25T01:37:37.577 に答える
1

できません。ただし、次のように、int への新しいポインターを作成し、その位置を指すことができます。

void *p;
p= malloc...
int *pi;
pi= p;
*pi= 25;
于 2012-04-25T01:41:56.470 に答える
1

変数の型を変更することはできません。型キャストを行うことはできますが、それは一時的なものです。あなたが望むのは次のようなものです*(int*)p = 100; printf("the value is : %d\n", *(int*)p);

于 2012-04-25T01:38:38.137 に答える