Форум программистов, компьютерный форум CyberForum.ru

Про typedef - C++

Восстановить пароль Регистрация
 
aleksandr_t94
0 / 0 / 0
Регистрация: 27.01.2013
Сообщений: 100
15.04.2013, 22:10     Про typedef #1
Читая книгу Дейтеля, дошёл до стеков и не понял небольшую мелочь, которая вводит меня в заблуждение. У нас есть структура и прототипы функций:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
struct stackNode
{
    int data;
    stackNode *nextPtr;
};
 
typedef struct stackNode STACKNODE;
typedef STACKNODE *STACKNODEPTR; //просто чтобы можно было делать так: STACKNODEPTR headPtr, endPtr; - наши указатели на структуру типа STACKNODE, которая в свою очередь является stackNode. Тут всё ясно
 
void push(STACKNODEPTR *, int);
int pop(STACKNODEPTR *);
int isEmpty(STACKNODEPTR); //тут понятно, просто 
void printStack(STACKNODEPTR);
Идём далее....Возьмём например функцию push из нашей книги и попробуем понять что к чему:
C++
1
2
3
4
5
6
7
8
9
10
11
void push(STACKNODEPTR *topPtr, int info) //что такое STACKNODEPTR *topPtr? Просто вообще не понятно, ведь STACKNODEPTR - это тип для указателей, который мы ввели выше, тогда зачем здесь *topPtr?
{
    STACKNODEPTR newPtr;
 
    newPtr=(struct stackNode*)malloc(sizeof(stackNode));
    if(newPtr==NULL) exit(1);
 
    newPtr->data=info;
    newPtr->nextPtr=*topPtr;
    *topPtr=newPtr; //не понятно почему *topPtr, а не просто topPtr?
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.04.2013, 22:10     Про typedef
Посмотрите здесь:

typedef C++
typedef C++
typedef в c++ C++
C++ Про typedef
Typedef C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Герц
523 / 340 / 4
Регистрация: 05.11.2010
Сообщений: 1,077
Записей в блоге: 1
15.04.2013, 22:22     Про typedef #2
В push передается указатель на указатель на вершину стека, иначе как эту самую вершину модифицировать, передавая указатель по значению?
xtorne21st
интересующийся
300 / 271 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
15.04.2013, 22:24     Про typedef #3
Цитата Сообщение от aleksandr_t94 Посмотреть сообщение
void push(STACKNODEPTR *topPtr, int info) //что такое STACKNODEPTR *topPtr? Просто вообще
Указатель на указатель вроде как
aleksandr_t94
0 / 0 / 0
Регистрация: 27.01.2013
Сообщений: 100
15.04.2013, 22:39  [ТС]     Про typedef #4
Цитата Сообщение от Герц Посмотреть сообщение
В push передается указатель на указатель на вершину стека, иначе как эту самую вершину модифицировать, передавая указатель по значению?
Не очень понял если честно, вот например та же функция в этой программе, только под названием printfStack, и тут понятно, что мы передаём указатель на саму структуру.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void printStack(STACKNODEPTR currentPtr)
{
    if(currentPtr==NULL)
        printf("The Stack is empty\n");
    else 
    {
        printf("The stack is:\n");
        while(currentPtr!=NULL)
        {
            printf("%d->", currentPtr->data);
            currentPtr=currentPtr->nextPtr;
        }
        printf("NULL\n\n");
    }
}
Функция printStack ясна до безобразия, но вот с push всё равно не понятно. Причём в самом int main она вызывается так:
C++
1
push(&stackPtr, value)
Зачем здесь амперсанд?
yoghurt92
373 / 344 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
15.04.2013, 22:53     Про typedef #5
aleksandr_t94, потому что первый аргумент функции push - указатель, поэтому мы должны передать ссылку на stackPtr.
aleksandr_t94
0 / 0 / 0
Регистрация: 27.01.2013
Сообщений: 100
15.04.2013, 22:55  [ТС]     Про typedef #6
Цитата Сообщение от yoghurt92 Посмотреть сообщение
aleksandr_t94, потому что первый аргумент функции push - указатель, поэтому мы должны передать ссылку на stackPtr.
Разобрался, просто плохо понимал что такое указатель на указатель. Спасибо
Yandex
Объявления
15.04.2013, 22:55     Про typedef
Ответ Создать тему
Опции темы

Текущее время: 04:17. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru