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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
aleksandr_t94
0 / 0 / 0
Регистрация: 27.01.2013
Сообщений: 100
#1

Про typedef - C++

15.04.2013, 22:10. Просмотров 344. Ответов 5
Метки нет (Все метки)

Читая книгу Дейтеля, дошёл до стеков и не понял небольшую мелочь, которая вводит меня в заблуждение. У нас есть структура и прототипы функций:
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++
Читаю книгу Дейтела наткнулся на программу, в которой не могу понять одну деталь, а именно смотрим в комментариях ниже. #include...

не видит typedef - C++
вот примерно что в первом - a.h файле class a { enum eSomeEnum { a = 0, b, //... и так далее ...

Наследование typedef'a - C++
Итак, в некотором классе typedef'ом определен тип: template<typename T> class Shape { public: typedef T sclar; }; ...

применение typedef - C++
Какова роль "*node"(последняя строка) в данном случае? typedef struct rbtree_node { enum color color; void *key; void *value; ...

_W64 в typedef - C++
Что такое _W64? typedef _W64 int ptrdiff_t;

typedef struct - C++
Ребята, нужна помощь. Первый раз использую typedef struct. Вроде бы всё работает, но хочу удостовериться по причине: это мой уже 2-ой...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Герц
524 / 341 / 4
Регистрация: 05.11.2010
Сообщений: 1,077
Записей в блоге: 1
15.04.2013, 22:22     Про typedef #2
В push передается указатель на указатель на вершину стека, иначе как эту самую вершину модифицировать, передавая указатель по значению?
xtorne21st
интересующийся
303 / 274 / 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
374 / 345 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
15.04.2013, 22:53     Про typedef #5
aleksandr_t94, потому что первый аргумент функции push - указатель, поэтому мы должны передать ссылку на stackPtr.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.04.2013, 22:55     Про typedef
Еще ссылки по теме:

Improper use of typedef - C++
В структурах : struct ActionController { public : int Signature; int ID; int ndx; int ActionSetsCount; ActionSet *...

Отличия using и typedef - C++
Всем привет. Собственно вопрос в чем различия при использовании: using size_type = unsigned long; и typedef unsigned...

typedef и vector - C++
typedef int array_Llist_upgrade; std::vector <array_Llist_upgrade> Llist_upgrade; array_Llist_upgrade array_Llist_upgrade_tmp; ...

Пояснение typedef - C++
typedef bool (*comparator)(void* fisrt, void* second); что делает *comparator, и что это вобще ?

тип typedef - C++
можете кинуть какую нибудь программу с преобразованием типа typedef (С++), очень срочно нужно..

работа с typedef - C++
Объясните пожалуйста в чем смысл конструкции: typedef struct _XMFLOAT2 { FLOAT x; FLOAT y; } XMFLOAT2; typedef создает...


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

Или воспользуйтесь поиском по форуму:
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
Ответ Создать тему
Опции темы

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