• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

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

  • Автор темы toto
  • Дата начала
T

toto

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

Senset

всё достаточно просто...
если тебе ничего не нужно возвращать через имя функции - то ставь 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;
}
 
V

vital

здесь достаточно юзать void, ибо вернуть через имя функции весь массив нельзя, точнее можно... но пока думай что нельзя =) не забивай голову сразу
Ахринеть.. раза 4 перечитал фразу пока понял..

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

toto

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

DarkKnight

ввод массива
здесь достаточно юзать void, ибо вернуть через имя функции весь массив нельзя, точнее можно... но пока думай что нельзя =) не забивай голову сразу
Во как загнул))) ржу - не могу)))) Но по сути в словах смысла очень много)))
 
D

DarkKnight

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

Принцип очень прост, если ты хочешь быть уверенным что функция не должна использоваться не по назначению (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 - гарантирует, что функция не вернет ничего и не примет ничего
 
E

European

дошёл до void и не могу до конца понять что это такое, вернее даже как с этим работать?


Добавлено:
вернуть через имя функции весь массив нельзя, точнее можно... но пока думай что нельзя =) не забивай голову сразу
В цитатник, однозначно
 
E

European

Что-то на дату я не глянул. Некропостинг :lovecodeby:
 
G

Guest

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

lazybiz

Михоу
Слуш, а ты крут скопипастить!!!
 
S

skysun

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

lazybiz

void - это отсутствие типа.
void * - это указатель на неопределенный тип, т.е. его можно так сказать закастить в любой другой, например:
C++:
void * x;
char * p;
x = malloc( 1024 );
p = (char *)x;
 
V

Vadik(R)

Да, второе применение void - это использование как нетипизированного указателя.
P.S. У самого после Delphi голова разрывалась, чтобы понять, что сие за чудо такое. Как-то понимание пришло со временем и практикой ;)
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!