История изменений
Исправление beastie, (текущая версия) :
Кстати, простенький и красивый пример использования поинтеров в реальной жизни (идиома спёрта мной когда-то из сырцов Plan9):
#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
struct list {
int value;
struct list *link;
};
int
main()
{
struct list *head, **headp, *p;
int i;
/* инициализируем */
head = NULL;
headp = &head;
/* заполняем */
for (i = 0; i < 10; i++) {
*headp = malloc(sizeof(struct list));
assert(*headp);
(*headp)->value = i;
headp = &(*headp)->link;
}
/* печатаем */
for (p = head; p; p = p->link)
printf("%d\n", p->value);
/* освобождать память лень, само очистится ☺ */
return 0;
}
PS: тут кстати и * и ** и &. ☺
Исправление beastie, :
Кстати, простенький и красивый пример использования поинтеров в реальной жизни (идиома спёрта мной когда-то из сырцов Plan9):
#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
struct list {
int value;
struct list *link;
};
int
main()
{
struct list *head, **headp, *p;
int i;
/* инициализируем */
head = NULL;
headp = &head;
/* заполняем */
for (i = 0; i < 10; i++) {
*headp = malloc(sizeof(struct list));
assert(*headp);
(*headp)->value = i;
headp = &(*headp)->link;
}
/* печатаем */
for (p = head; p; p = p->link)
printf("%d\n", p->value);
/* освобождать память лень, само очистится ☺ */
return 0;
}
Исходная версия beastie, :
Кстати, простенький пример использования поинтеров в реальной жизни (идиома спёрта мной когда-то из сырцов Plan9):
#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
struct list {
int value;
struct list *link;
};
int
main()
{
struct list *head, **headp, *p;
int i;
/* инициализируем */
head = NULL;
headp = &head;
/* заполняем */
for (i = 0; i < 10; i++) {
*headp = malloc(sizeof(struct list));
assert(*headp);
(*headp)->value = i;
headp = &(*headp)->link;
}
/* печатаем */
for (p = head; p; p = p->link)
printf("%d\n", p->value);
/* освобождать память лень, само очистится ☺ */
return 0;
}