С++ Void - что сие есть?

Тема в разделе "C и С++ FAQ", создана пользователем toto, 26 мар 2010.

  1. toto

    toto Гость

    Всем привет!
    Начинаю постигать самые-самые азы С++ и дошёл до void и не могу до конца понять что это такое, вернее даже как с этим работать?
    Гуглил и читал несколько вариаций определения void, но так и не дошло :rolleyes: .
    Если кто-нибудь может, то приведите самый-самый примитивный пример с использованием void и без него с пояснением почему и как на пальцах для самых глупых.
    Пожалуйста, когда просмеётесь или наворчитесь от глупости вопроса, всё же ответьте!
    Спасибо за внимание!
     
  2. Senset

    Senset Well-Known Member

    Регистрация:
    11 сен 2006
    Сообщения:
    136
    Симпатии:
    0
    всё достаточно просто...
    если тебе ничего не нужно возвращать через имя функции - то ставь void (пусто) - т.е. не нужно будет писать return...

    функции считает синус =)
    void my_sin(float x; float *rez)
    {
    rez=sin(x);
    }

    float my_sin(float x)
    {
    return sin(x);
    }

    ввод массива
    здесь достаточно юзать void, ибо вернуть через имя функции весь массив нельзя, точнее можно... но пока думай что нельзя =) не забивай голову сразу
    void array_input(int n, int *a)
    {
    for (int i=0;i<n;i++) scanf("%d",&a);
    }

    тоже самое, но через имя теперь вернется никому не нужный нуль =) хотя это можно использовать для определения ошибки в функции, т.е. если по выполнению - вернулся не нуль, значит где-то косяк
    float array_input(int n, int *a)
    {
    for (int i=0;i<n;i++) scanf("%d",&a);
    return 0;
    }
     
  3. vital

    vital Больной Компом Детектед

    Регистрация:
    29 янв 2006
    Сообщения:
    2.468
    Симпатии:
    27
    Ахринеть.. раза 4 перечитал фразу пока понял..

    Добавлено:
    Слушайте этого дядю. Он умный)
     
  4. toto

    toto Гость

    Senset
    Прокомментируй или даже пропиши, пожалуйста, словами каждую строчку. Это бы мне очень помогло и избавило бы от вопросов. Кое-что я знаю, а кое-что меня путает.
    Понимаю, что уже возможно похоже на наглость, но было бы очень здорово.
    Спасибо!)
     
  5. DarkKnight

    DarkKnight Well-Known Member
    C\C++ Team

    Регистрация:
    1 авг 2010
    Сообщения:
    653
    Симпатии:
    0
    Во как загнул))) ржу - не могу)))) Но по сути в словах смысла очень много)))
     
  6. DarkKnight

    DarkKnight Well-Known Member
    C\C++ Team

    Регистрация:
    1 авг 2010
    Сообщения:
    653
    Симпатии:
    0
    Принцип очень прост, если ты хочешь быть уверенным что функция не должна использоваться не по назначению (100%ов не возвращать никогда значение и не принимать их ни при каких обстоятельствах ты используешь void)....
    Попробую на примере объяснить, программист упускает void и думает что функция f,которая предположим должна менять какую то глоб. переменную, никогда не понадобиться для возврата значения, поэтому он пишит по старинки берет int
    int c; //глобальная переменная
    int f(int a,int :lovecodeby:
    {
    //что то делаем
    c= a + b;
    //А что бы правельно выйти делать стандартный код выхода например 1
    return 1;
    }

    другой программист дописывает программный модуль для стравнения сравнения статуса защиты например
    когда что-то не так то например форматнуть жесткий диск что бы данные не попали к кому нибудь :))) Ну для примера же ;-)
    и пишит функцию, если возвращает 0 - все ок... если 1- палево....форматим жестак... :)
    int f2(int a,int :ithx:
    {
    int result = 0;
    ///что то делаем там
    //условия, сравнения и прочее

    return result;
    }

    и в исполняемом месте, к примеру в main вписывает это сравнение

    void main (void)
    {
    ....
    ....
    if ( f(3,4) == (int)1) //И вот незадача, он забыл, что у него функция f2 (с циферкой), а не просто f, а она в свою очередь всегда 1 возвращает, а не должная возвращать вообще ничего....
    {
    //код форматирования
    }
    //Запускает на тест... Бах... и у него больше нет жестака :)))

    }


    Ну это грубо конечно, но должно быть понятно...
    void - гарантирует, что функция не вернет ничего и не примет ничего
     
  7. European

    Регистрация:
    4 сен 2006
    Сообщения:
    2.580
    Симпатии:
    0
    http://ru.wikipedia.org/wiki/Void

    Добавлено:
    В цитатник, однозначно
     
  8. European

    Регистрация:
    4 сен 2006
    Сообщения:
    2.580
    Симпатии:
    0
    Что-то на дату я не глянул. Некропостинг :lovecodeby:
     
  9. Гость

    воид - тип "пустое значение", до функции описывается тип возвращаемых данных воид значит что функция ничего не возвращает тоесть возвращает пустое значение, используют для работы функций с указателями, динамическими массивами или глобальными переменными.
     
  10. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    Михоу
    Слуш, а ты крут скопипастить!!!
     
  11. skysun

    skysun Гость

    Я не гуру С/С++. В работе чаще использую другие языки.
    Но если правильно помню void это generic type. Поэтому он в некоторых случаях означает "ничего", а в других "все". Я имею ввиду что void* может указывать на все что угодно и т.п.
    Вроде как-то так.
     
  12. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    void - это отсутствие типа.
    void * - это указатель на неопределенный тип, т.е. его можно так сказать закастить в любой другой, например:
    Код (C++):
    void * x;
    char * p;
    x = malloc( 1024 );
    p = (char *)x;
     
  13. Vadik(R)

    Vadik(R) Well-Known Member

    Регистрация:
    12 дек 2007
    Сообщения:
    483
    Симпатии:
    0
    Да, второе применение void - это использование как нетипизированного указателя.
    P.S. У самого после Delphi голова разрывалась, чтобы понять, что сие за чудо такое. Как-то понимание пришло со временем и практикой ;)
     
Загрузка...

Поделиться этой страницей