在C中如何将void指针转换为char指针

在C中如何将void指针转换为char指针,c,pointers,void-pointers,C,Pointers,Void Pointers,好吧,这让我很困惑。我只是不知道这个作业有什么问题: void *pa; void *pb; char *ptemp; char *ptemp2; ptemp = (char *)pa; ptemp2 = (char *)pb; 有谁能告诉我为什么会出现这个错误: 错误:从“void*”到“char*”的转换无效 事实上,你的编译器一定有问题(或者你还没有讲完整的故事)。将void*强制转换为char*是完全合法的。此外,转换在C中是隐式的(与C++不同),也就是说,下面的代码也应该编译

好吧,这让我很困惑。我只是不知道这个作业有什么问题:

void *pa; void *pb;
char *ptemp; char *ptemp2; 

ptemp = (char *)pa;
ptemp2 = (char *)pb;
有谁能告诉我为什么会出现这个错误:

错误:从“void*”到“char*”的转换无效


事实上,你的编译器一定有问题(或者你还没有讲完整的故事)。将
void*
强制转换为
char*
是完全合法的。此外,转换在C中是隐式的(与C++不同),也就是说,下面的代码也应该编译

 char* pChar;
 void* pVoid;
 pChar = (char*)pVoid; //OK in both C and C++
 pChar = pVoid;        //OK in C, convertion is implicit

我刚刚在一个名为temp.c的模块中尝试了你的代码。我添加了一个名为f1的函数

void *pa; void *pb;
char *ptemp; char *ptemp2;

f1()
{
        ptemp = (char *)pa;
        ptemp2 = (char *)pb;
}
在Linux上,我输入了gcc-c temp.c,编译时没有错误或警告


您在哪个操作系统上尝试此操作?

此代码不会产生任何错误(假设上下文正确)。这些转换没有什么无效的。这样的错误通常是在C++中生成的,<>代码> pTEMP= Pa//Cuff>赋值(即,没有强制转换,C++编译器)。您声称正在使用C编译器,并且在那里有显式强制转换。你的案子不会有这样的错误。请发布真实代码。什么编译器?它是C编译器,而不是C++编译器吗?事实上,您拥有的是合法的C,在C99标准模式下将通过
gcc
而不会出现任何问题。这是一条奇怪的错误消息…错误可能是因为此赋值语句出现在全局范围中而不是函数中。@Vlad Lazarenko:这可能会触发一条非常不同的错误消息。我使用的是g++作为编译器而不是gcc。也许GCC有这个问题?我使用G+编译器,我在Windows VisualC++上编译了代码,没有问题,但是用G+我得到了这个错误,我真的很担心C,但是GCC给了我一个
-Wincompatible指针类型
,当把
char**
传递给一个以
void**
为参数的函数时,它只对单指针隐式的吗?@APJo:当然,看起来
T*
可以转换成
void*
。如果将
T
设置为
char*
,您将看到
char**
可以隐式转换为void*,但不能转换为
void**
@ArmenTsirunyan我不清楚。我需要这是一个
void**
。@APJo:为什么你需要它是一个
void**
,你打算用它做什么?