2017-05-04 88 views
-1

假设我们有一个struct“message_t”:铸造void指针,以结构

message_t *msg; 

如果一个函数返回一个空指针可以在我们只需要把地址分配给味精,还是我们需要转换指针?:

void *data; 
msg = data; 

我见过这里的“数据”将被转换为message_t箱子,但是这似乎并没有完全必要的,所以在这种情况下,你会怎么做呢?

当然指针类型(message_t)应该足以告诉编译器如何取消引用指针(即多少个字节在struct需要第一可变,等等)。

让我知道如果我的问题不明确。

+3

如果不解除引用指针,则不能将指针转换为结构。您可以将它转换为指向结构的指针('message_t *')。 –

+0

演员实际上做了什么? – user3163179

+1

您不能只将一个类型的指针投射到另一个类型的指针。你是如何获得'void *'的?阅读[问]并提供[mcve]。 – Olaf

回答

3

你不需要投空指针,但你可以的,如果你想,即,为了清楚。以下简单示例说明了这一点:

void* data = malloc(32); 
char* msg = data; 
strcpy(msg, "Testing."); 
+0

好吧,这是开始有意义!你能否详细说明为什么你真的想要施展它?我认为我的困惑来自于似乎没有必要的事实。 – user3163179

+0

同样,我们可以这样做: int a = 5; double * b =&a; 甚至认为我可能会得到意想不到的结果。 – user3163179

+0

@ user3163179您的评论示例是'int *'为'double *' - 在C中没有定义的行为。这个好的答案从'malloc()'到'char *'做了一个'void *' - 这没问题。 – chux