Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.06.2013, 10:43   #1
Gtnz8
Пользователь
 
Аватар для Gtnz8
 
Регистрация: 09.08.2012
Сообщений: 95
По умолчанию И снова указатель.

Код:
#include <stdio.h>
#include <stdlib.h>

int main()
{
    struct entry
    {
        int value;
        struct entry *next;
    };
    struct entry n1,n2,n3;
    struct entry *pointer = &n1;
    n1.value=100;
    n1.next=&n2;
    n2.value=200;
    n2.next=&n3;
    n3.value=300;
    n3.next =(struct next*) 0;
    while(pointer != (struct next*)0)
    {
        printf("%d\n",pointer->value);
        pointer= pointer->next;
    }
    return 0;
}
У меня такой вопрос, если я перепишу вот этот участок кода
Код:
n3.next =(struct next*) 0;
    while(pointer != (struct next*)0)
следующим образом
Код:
n3.next=0;
while(pointer)
это будет нарушением синтаксиса ?
Gtnz8 вне форума Ответить с цитированием
Старый 12.06.2013, 11:42   #2
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,679
По умолчанию

Что вы пытаетесь сделать в этом коде? привести 0 к типу (struct next*). Напишите
Код:
n3.next = NULL;
так будет правильней, на мой взгляд.
А записи
Код:
while(pointer != NULL)
и
Код:
while(pointer)
Идентичный...
Присваивание 0 указателя на сколько я помню присуща C++, а в Си - NULL (хотя 0 и NULL равнозначны).
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!
Bugrimov вне форума Ответить с цитированием
Старый 12.06.2013, 18:13   #3
Gtnz8
Пользователь
 
Аватар для Gtnz8
 
Регистрация: 09.08.2012
Сообщений: 95
По умолчанию

В данном утверждении
Код:
n3.next=(struct entry*)0
выполняется приведение типов для того, чтобы использовать константу 0 ,ну или как вы правильнее заметили Null, как необходимый тип (указатель на тип struct entry).
Вот я и хочу узнать, приведение типов является обязательным ?
Да, чуть не забыл,а ноль является указателем на конец связанного списка, но вы и сами наверное уже догадались.

Последний раз редактировалось Gtnz8; 12.06.2013 в 18:19.
Gtnz8 вне форума Ответить с цитированием
Старый 12.06.2013, 18:20   #4
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

Gtnz8


У меня такой вопрос, если я перепишу вот этот участок кода
следующим образом

n3.next=0;
while(pointer)

это будет нарушением синтаксиса ?


не будет.
конструкция if|while... (ptr) равнозначна if (pointer != nullptr)
(или if (pointer != NULL) в старых компиляторах)

Вот я и хочу узнать, приведение типов является обязательным ?

В Си - не уверен, вроде надо, в C++ - нет
Rififi вне форума Ответить с цитированием
Старый 12.06.2013, 21:49   #5
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,679
По умолчанию

В Си приведение типов - надо... в C++ - нет, хотя не факт...
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!
Bugrimov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Передать указатель на указатель в функцию erro Общие вопросы C/C++ 3 29.10.2012 17:59
Указатель praysu Помощь студентам 0 15.10.2012 01:32
указатель на указатель петя иванов Общие вопросы C/C++ 5 10.04.2011 02:23
MDIChild снова и снова... Siber_Dec Общие вопросы Delphi 2 13.12.2009 03:24
Указатель n на m CESHNIK Общие вопросы C/C++ 7 07.03.2008 23:35