2015-10-23 2 views
0

Я пытаюсь нажать указатель на свой элемент в стек, чтобы он возвращал указатель вместо элемента.Push-указатель элемента в стек

Основываясь на моем ограниченном понимании, он возвращает элемент, но не указатель.

typedef struct Stack 
{ 
    int capacity; 
    int size; 
    TLDNode* elements; 
}Stack; 


void push(Stack *S,TLDNode *element) 
{ 

    S->elements = element; 
    S->size = S->size + 1; 
    return; 
} 



Stack *S; 
    S = (Stack *)malloc(sizeof(Stack)); 
    S->elements = (TLDNode *)malloc(sizeof(TLDNode)*100); 
    S->size = 0; 
    S->capacity = 100; 

    PUSHTOSTACK(tld->head, S); 

недействительным PUSHTOSTACK (TLDNode * корень, Stack * S) {

PUSHTOSTACK(S,root); 

}

+0

'S-> размер = S-> площадь + 1;' может быть упрощено до 'S-> размер + = 1;' 'или даже S-> size ++; ' – DaoWen

ответ

1

Ваш elements член вашего стека структуры имеет тип TLDNode*, что эквивалентно массив TLDNode s. То, что вы хотите, это массив указателей наTLDNode с, так что вам нужно другое * там:

typedef struct Stack 
{ 
    int capacity; 
    int size; 
    TLDNode** elements; 
}Stack; 

Технически это просто указатель на указатель на TLDNode, но это в основном эквивалентна массив указателей, как продемонстрировано в следующем фрагменте кода:

TLDNode *node_array[10]; // Array of 10 pointers to TLDNodes 
TLDNode **elements = node_array; // node_array is assignable to elements 
+0

@FlyingAtom - Вы не знаете (и, возможно, не должен) использовать результат 'malloc' в C. Попробуйте следующее:' S-> elements = malloc (sizeof (* S-> elements) * 100); ' – DaoWen

+0

@FlyingAtom - Вы должны действительно задавайте только один вопрос на вопрос ... Но ваши типы явно не совпадают. Они не совпадают, потому что вы пытаетесь заменить * весь массив элементов * на элемент * single *. То, что вы, вероятно, хотите сделать, это установить элемент * last * в массиве для данного элемента. 'S-> elements [S-> size-1] = element;' – DaoWen

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