2016-11-29 2 views
0

Моя структура структурыC точки к следующему элементу (список)

struct Unit { 
    int number; 
    struct Unit *next; 
}; 


int main(void) { 
    struct Unit *head = build(5); /* Suppose that I have list of 5 units pointing to next one. Function build return the list */ 
    fn(head); 
    printf("%d", head->number); 
} 

Можно ли перейти к следующему элементу внутри функции, как это?

void fn(struct Unit *head) { 
    head = head->next; 
} 

Снаружи у меня все еще есть указатель на первый элемент после вызова функции.

+1

'head' передается по значению, поэтому вы не увидите никаких изменений, внесенных вами в функцию вне его. –

+0

Изменить на 'void fn (struct Unit ** head) { * head = (* head) -> next; } 'и Call' fn (&head); 'Но, возможно, это означает, что утечка памяти. – BLUEPIXY

+0

Помните, что указатели могут быть переданы по значению (head poineter inside fn - это просто копия указателя на голову за его пределами) – user3655463

ответ

1

Да, это нормально (хотя имя параметра head немного вводит в заблуждение). Как вы отметили, итерация таким образом внутри функции не повлияет на указатель head вне вызова функции.

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