2015-12-05 3 views
1

Я не понимаю, почему назначение «корень» к равным «Trieu» был бы несовместим указатель:/Link список несовместим указатель типа

#include <stdio.h> 
#include <stdlib.h> 

struct uniform { 
    char size; 
    int number; 
    struct uniform *ext; 
}; 

struct uniform *trieu; 
struct unifrom *root; 

int main(void) { 
    trieu = malloc(sizeof(struct uniform)); 
    root = trieu; 
... 
    trieu = root; 

Когда я скомпилировать его с GCC это дает мне:

program.c: In function ‘main’: 
program.c:15:7: warning: assignment from incompatible pointer type 
    root = trieu; 
^
program.c:57:8: warning: assignment from incompatible pointer type 
    trieu = root; 

Он работал раньше в другой программе я сделал с:

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 

struct ll { 
    char store; 
    struct ll *ext; 
}; 

struct ll *trieu; 
struct ll *root; 

int main(int argc, char* argv[]) { 
    trieu = malloc(sizeof(struct ll)); 
    root = trieu; 
... 

ответ

1

у вас есть опечатка. Используйте struct uniform *root; вместо struct unifrom *root;.

-2

Прежде всего, при использовании malloc для выделения нового sturct вам нужно указать указатель возврата.

struct uniform { 
    char size; 
    int number; 
    struct uniform *ext; 
}UNIFORM; 

trieu = (UNIFORM*)malloc(sizeof(UNIFORM)); 
+1

Они говорят, что [вы не должны отбрасывать результат 'таНос()' в C] (http://stackoverflow.com/questions/605845/do-i-cast-the-result-of- таНос). – MikeCAT

+0

Истина, это необязательно, поскольку void * автоматически продвигается к любому другому типу указателя. –

Смежные вопросы