Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 29.10.2013
Сообщений: 11
1

Обращение к структуре

29.10.2013, 14:02. Показов 978. Ответов 9
Метки нет (Все метки)

Совсем не могу понять...Вот код
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#include <stdio.h>
#include <stdlib.h>
 
typedef struct STACKNODE {
    int value;
    struct STACKNODE * next;
} stacknode_t;
 
int push(stacknode_t ** stack, int value){
    stacknode_t * node;
    
    if ( ! ( node = malloc(sizeof(stacknode_t)) ) )
        return -1;
    
    node->value = value;
    node->next = *stack;
    *stack = node;
    
    return 0;
}
 
int pop(stacknode_t ** stack, int * value){
    stacknode_t * node;
    
    if ( *stack == NULL )
        return -1;
    
    node = (*stack)->next;
    *value = (*stack)->value;
    free(*stack);
    *stack = node;
    
    return 0;
}
 
int menu(void){
    int ret;
    
    printf("\n1 - push, 2 - pop, 0 - exit\n> ");
 
    return ( scanf("%d", &ret) == 1 ) ? ret : -1;
}
 
int main(void){
    stacknode_t * stack = NULL;
    int action, value;
    
    while ( action = menu() ){
        switch ( action ){
            case 1:
                printf("Value: ");
                if ( scanf("%d", &value) != 1 ){
                    scanf("%*s");
                    fprintf(stderr, "Input error!\n");
                    break;
                }
                if ( push(&stack, value) ){
                    fprintf(stderr, "Memory error!\n");
                    exit(1);
                }
                printf("Added to stack.\n");
                break;
            case 2:
                if ( pop(&stack, &value) ){
                    fprintf(stderr, "Empty stack or unknown error!\n");
                    break;
                }
                printf("Returned value: %d\n", value);
                break;
            default:
                scanf("%*s");
                fprintf(stderr, "Wrong menu selection!\n");
                break;
        }
    }
    
    while ( ! pop(&stack, &value) )
        ;
    printf("Goodbye!\n");
    
    exit(0);
}
C
1
int push(stacknode_t ** stack, int value){
А именно stacknode_t ** stack что это??? Вообще не могу въехать...
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.10.2013, 14:02
Ответы с готовыми решениями:

Сортировка в структуре
Здравствуйте, есть такая задача: Из файла (test.txt) нужно считать данные в структуру и...

условие в структуре
нужен поиск для вывода дисциплин заканчивающихся экзаменом#include &lt;stdio.h&gt; // определение...

Сортировка в структуре
Ребят помогите пожалуйста реализовать в данной структуре сортировку по номеру группы по...

Ошибки в структуре
Появляется ошибка Expression: public_stream !=nullptr . Что это и как это исправить? Вот код: ...

__________________
9
Модератор
Эксперт С++
10484 / 8727 / 5272
Регистрация: 18.12.2011
Сообщений: 23,329
29.10.2013, 14:07 2
stacknode_t ** stack означает, что в stack будет хранится адрес ячейки,
в которой содержится адрес структуры типа stacknode_t
0
0 / 0 / 0
Регистрация: 29.10.2013
Сообщений: 11
29.10.2013, 14:09  [ТС] 3
Но разве stacknode_t - это не переменная типа структуры? А именно STACKNODE.
0
Модератор
Эксперт С++
10484 / 8727 / 5272
Регистрация: 18.12.2011
Сообщений: 23,329
29.10.2013, 17:42 4
Впереди объявления структуры стоит слово typedef.
Это означает, что везде, где написано stacknode_t
подставляется объявление структуры.
1
easybudda
30.10.2013, 02:44
  #5

Не по теме:

Какая-то знакомая програмка... :)

1
0 / 0 / 0
Регистрация: 29.10.2013
Сообщений: 11
30.10.2013, 12:04  [ТС] 6
А зачем это нужно? Почему бы не оставить все типа STACKNOTE?

Добавлено через 47 секунд
Так это твоя програмка вот Реализовать стек
0
Модератор
Эксперт С++
10484 / 8727 / 5272
Регистрация: 18.12.2011
Сообщений: 23,329
30.10.2013, 12:08 7
Цитата Сообщение от Mapcicc Посмотреть сообщение
Почему бы не оставить все типа STACKNOTE?
можно оставить, но в языке Си придется всегда писать не просто STACKNOTE,а
C
1
struct STACKNOTE stacknode_t;
1
0 / 0 / 0
Регистрация: 29.10.2013
Сообщений: 11
30.10.2013, 12:23  [ТС] 8
Огромное спасибо, кажется, наступил просвет в голове...

Добавлено через 8 минут
У меня еще вопрос, получается, что нам гарантировано, что память будет выделяться строго последовательно в одном месте, когда мы пользуемся node = malloc(sizeof(stacknode_t))
0
Модератор
Эксперт С++
10484 / 8727 / 5272
Регистрация: 18.12.2011
Сообщений: 23,329
30.10.2013, 12:37 9
Вопрос не совсем понятен.
Память естественно выделяется одним куском
и с ней можно работать как с массивом.
Но если удалить выделенный кусок, а потом выделить снова,
то совсем не обязательно, что у нее будет тот же адрес,
что и в первый раз.
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
10910 / 6836 / 1625
Регистрация: 25.07.2009
Сообщений: 12,540
30.10.2013, 14:16 10
Цитата Сообщение от zss Посмотреть сообщение
Но если удалить выделенный кусок, а потом выделить снова,
то совсем не обязательно, что у нее будет тот же адрес,
что и в первый раз.
Да мало того! Если создать два узла подряд, вовсе не обязательно, что они в памяти так же один сразу за другим будут...
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.10.2013, 14:16

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Сортировка в структуре
Здравствуйте, каким образом можно отсортировать структуру чтобы не терялись остальные поля мне надо...

Сортировка данных в структуре.
Здравствуйте. Необходимо отсортировать числовые данные в структуре. Интересует qsort. Искал на...

Инициализация полей в структуре
#include &lt;iostream&gt; #include &lt;string.h&gt; #include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include...

Пояснить объявления в структуре
увидел сие где то что то подобное в винапишных структурах, никогда раньше не встречал такой записи,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.