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

о правильности написания - C++

Восстановить пароль Регистрация
 
NinGAZ
13 / 13 / 1
Регистрация: 27.07.2011
Сообщений: 162
25.02.2013, 21:58     о правильности написания #1
Всем привет! Есть неясности:

Имеем функцию:
C++
1
void foo(int* i);
Как правильнее ее описать и вызывать?

В книгах выдел 2 варианта:

C++
1
2
3
4
5
void foo(int* i)
{
 return *i+*i;
}
// при этом вызов был foo(i);
и

C++
1
2
3
4
5
void foo(int* i)
{
 return i+i;
}
// при этом вызов был foo(&i);
Мне ближе 2ой тип,но вдруг это не совсем правильно. Дайте совет. Всем добра
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
WhiteP
605 / 203 / 23
Регистрация: 20.11.2012
Сообщений: 419
25.02.2013, 22:08     о правильности написания #2
Цитата Сообщение от NinGAZ Посмотреть сообщение
Как правильнее ее описать и вызывать?
Оба варианта неправильны по многим причинам.
void - это ничто. Функция void не должна возвращать значения.
return i+i; "возвращает" адрес умноженный на два.
return *i+*i; - значение по адресу i умноженное на два.
Nikcharn
 Аватар для Nikcharn
71 / 53 / 3
Регистрация: 31.07.2009
Сообщений: 149
25.02.2013, 22:12     о правильности написания #3
Такой вопрос, а почему в функции вы используете тип void? Если, как я понял вы хотите вернуть тип int.
NinGAZ
13 / 13 / 1
Регистрация: 27.07.2011
Сообщений: 162
25.02.2013, 22:13  [ТС]     о правильности написания #4
косяк,согласен. суть была не в типе возвращаемого,а описании при отправке адреса/указателя
Nikcharn
 Аватар для Nikcharn
71 / 53 / 3
Регистрация: 31.07.2009
Сообщений: 149
25.02.2013, 22:38     о правильности написания #5
Еще один вопрос, а переменная i - типа int, или указатель на тип int?
Если это не указатель, то у Вас программа скомпилироваться не должна. По-моему, выйдет ошибка can not convert from int to int*.
У Вас работает?
NinGAZ
13 / 13 / 1
Регистрация: 27.07.2011
Сообщений: 162
26.02.2013, 21:27  [ТС]     о правильности написания #6
я вообще вчера был в неадеквате,за что очень стыдно.. в общем писал программу со списками,и получались такого рода ф-и:

C++
1
2
3
4
5
void push(dyn_list* list)//вызов push(&list);
{
//а дальше реализация без указателей,то есть
//list->last->next и тому подобное
}
Все работает,но мне не дает покое сам факт моего написания. В одних вариантах везде указаны указатели явно
C++
1
2
3
4
void cube(int* x)
{
 *i= *i * *i * *i;
}
а у меня по сути они не указываются. Или это так при работе со структурами?
Nikcharn
 Аватар для Nikcharn
71 / 53 / 3
Регистрация: 31.07.2009
Сообщений: 149
27.02.2013, 03:40     о правильности написания #7
Цитата Сообщение от NinGAZ Посмотреть сообщение
void cube(int* x)
{
**i= *i * *i * *i;
}
Во первых в аргументах функции, наверное, i. А во вторых, мы передаем в функцию указатель на тип int. И чтобы умножить значение (не адрес!) нам надо его разыменовать.

Добавлено через 5 минут
Цитата Сообщение от NinGAZ Посмотреть сообщение
void push(dyn_list* list)//вызов push(&list);
{
//а дальше реализация без указателей,то есть
//list->last->next и тому подобное
}
Здесь ты тоже можешь разыменновать свой класс, а еще для этого придумали "->", что по-моему удобнее, чем писать каждый раз *(MyClass).method.
Но каким вариантом пользоваться выбирай сам.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.02.2013, 18:48     о правильности написания
Еще ссылки по теме:

Проверка правильности ввода C++
Проверка правильности ввода C++
Проверка правильности тетраэдра C++

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

Или воспользуйтесь поиском по форуму:
NinGAZ
13 / 13 / 1
Регистрация: 27.07.2011
Сообщений: 162
27.02.2013, 18:48  [ТС]     о правильности написания #8
Nikcharn, спасибо! очень емко и то что нужно. я как-то упустил разыменовывание,это и ввело в ступор.
Yandex
Объявления
27.02.2013, 18:48     о правильности написания
Ответ Создать тему
Опции темы

Текущее время: 13:42. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru