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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.07.2009, 20:50   #1
Malkovich
Пользователь
 
Регистрация: 09.07.2009
Сообщений: 16
Радость Возврат значения функции по ссылке(подскажите новичку)

Код:
int a;
int& func()
{
       return a;
}
void main()
{
       func() = 10;
}
я не пойму что тут возвращается?
как 'а' в итоге стало равно 10?

Код:
int& func(int*& n)
{
	return *n;
}
void main()
{
	int* a = new int;
	func(a) = 10;
}
а это как работает?
В Лафаре и Солтере этот вопрос плохо описан.
Напишите пожалуйста где этот вопрос подробно рассматривается,
сайт или книга(и номер страницы если можно).
Заранее спасибо тому кто поможет.

Последний раз редактировалось MaTBeu; 13.07.2009 в 22:45.
Malkovich вне форума Ответить с цитированием
Старый 13.07.2009, 21:14   #2
profi
Участник клуба Подтвердите свой е-майл
 
Регистрация: 19.11.2007
Сообщений: 1,022
По умолчанию

Не пишите так
Код:
void main()
. Это грубейшая ошибка.
А теперь к ссылкам
Код:
int a;
int& func()
{
return a;
}
void main()
{
func() = 10;
}
Возвращаем ссылку на переменную a. Эта пременная и принимает значение 100. Аналогичная ситуация тут

Код:
int& func(int*& n)
{
return *n;
}
void main()
{
int* a = new int;
func(a) = 10;
}
Только тут int& func(int*& n) амперсанд лишний. Мы и так передаем в функция адрес при вызове её, зачем это еще раз указывать тут int& func(int*& n), можно написать так int& func(int* n).
Советую книги Г.Шилдта "Самоучитель С++" и Стивена Прата тоже по С++ (название впадлу писать, она одна такая единственная и неповторимая)

Последний раз редактировалось profi; 13.07.2009 в 21:19.
profi вне форума Ответить с цитированием
Старый 13.07.2009, 21:15   #3
Dimarik
Форумчанин
 
Аватар для Dimarik
 
Регистрация: 18.04.2009
Сообщений: 688
По умолчанию

стивен прата - супер книжка

Цитата:
Не пишите так
Код:


void main()

. Это грубейшая ошибка.
почему грубейшая ошибка??
это просто говорит о том, что main ничего не возвращает и, следовательно, отпадает необходимость писать оператор return 0, который ничего не делает, он просто возвращает в функцию, которая вызывала main. А main вызывала винда (если я не ошибаюсь), то main без void`a с написанным по умолчанию типом int вернёт значение 0, которое нигде не используется.
void main() и
main() - одно и то же, не понимаю, в чём тут грубейшая ошибка?

Последний раз редактировалось MaTBeu; 13.07.2009 в 22:46.
Dimarik вне форума Ответить с цитированием
Старый 13.07.2009, 21:23   #4
profi
Участник клуба Подтвердите свой е-майл
 
Регистрация: 19.11.2007
Сообщений: 1,022
По умолчанию

main() всегда должна возвращать значение int.

Код:
int main()
{
..............
reutrn 0;
}
Этот код означает, что main() возвращает управление ОС, после выполнения программы. Как сказал один форумчанин (ник точно не помню, но фраза запомнилась, цитирую не дословно) типа в "правильных ОС" это обязательно. Я с ним вполне согласен. ОС Windows - это дрова, там все можно, после чего все и летит)) (шутка).
profi вне форума Ответить с цитированием
Старый 13.07.2009, 21:37   #5
Dimarik
Форумчанин
 
Аватар для Dimarik
 
Регистрация: 18.04.2009
Сообщений: 688
По умолчанию

но почему же всё нормально работает без int???
Dimarik вне форума Ответить с цитированием
Старый 13.07.2009, 21:43   #6
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Цитата:
Сообщение от Dimarik Посмотреть сообщение
но почему же всё нормально работает без int???
Где работает? в Visual C++ 6.0 ? В новых компиляторах, которые стандарт языка лучше поддерживают, это работает?
pu4koff вне форума Ответить с цитированием
Старый 13.07.2009, 22:30   #7
neo-210
Пользователь
 
Регистрация: 09.01.2009
Сообщений: 21
По умолчанию

Не буду спорить как лучше писать, а вот насчет того шо в новых void работает, 100 балов
neo-210 вне форума Ответить с цитированием
Старый 13.07.2009, 22:53   #8
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,604
По умолчанию

Код:
#include <iostream>

void main()
{
	std::cout << "Hello world!" << std::endl;
}
2008 студия схавала за милую душу. Без единого варнинга и ошибки.
А по поводу
Цитата:
main() всегда должна возвращать значение int.
Подтверждайте примерами ваши высказывания, потому что подобные заявления могут послужить причиной нехилого холивара, который превратит эту тему в флудильню, которая утопит сабж темы в оффтопе.
MaTBeu вне форума Ответить с цитированием
Старый 13.07.2009, 23:43   #9
profi
Участник клуба Подтвердите свой е-майл
 
Регистрация: 19.11.2007
Сообщений: 1,022
По умолчанию

Цитата:
Подтверждайте примерами ваши высказывания
Попробуйте этот текст программы набрать в Dev C++ 4.9.9.2 (последняя версия по моему).
profi вне форума Ответить с цитированием
Старый 14.07.2009, 00:11   #10
Goodwin98
equ asm
Участник клуба
 
Аватар для Goodwin98
 
Регистрация: 02.05.2009
Сообщений: 1,605
По умолчанию

На самом деле, хоть компилятор(проверял на VC++ и IC++) и переваривает void main() , он в конечный код вставляет в конце xor eax,eax/ret, а это и есть return 0;. Вот и все.
Какой вопрос - такой ответ. Не забываем пользоваться поиском, гуглом.
Помощь в выполнении работ по ассемблеру ICQ:2725322O4

Последний раз редактировалось Goodwin98; 14.07.2009 в 00:14.
Goodwin98 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Указатели на функции(подскажите новичку) Malkovich Общие вопросы C/C++ 7 17.07.2009 13:35
Возврат результата функции по ссылке gladov Общие вопросы C/C++ 2 24.06.2008 22:48
подскажите новичку си ++ 5.02 alexs2141 Помощь студентам 30 01.06.2008 23:19
пожалуйста подскажите новичку alexs2141 Помощь студентам 8 01.06.2008 21:31