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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
NinGAZ
14 / 14 / 1
Регистрация: 27.07.2011
Сообщений: 162
#1

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

25.02.2013, 21:58. Просмотров 441. Ответов 7
Метки нет (Все метки)

Всем привет! Есть неясности:

Имеем функцию:
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ой тип,но вдруг это не совсем правильно. Дайте совет. Всем добра
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.02.2013, 21:58
Здравствуйте! Я подобрал для вас темы с ответами на вопрос о правильности написания (C++):

функция проверки правильности написания адреса почты - C++
Написать функцию проверки правильности написания адреса почты. Функция возвращает указатель на переданную в неё строку с адресом почты,...

функция проверки правильности написания адреса почты (под DevC++ - C++
Написать функцию проверки правильности написания адреса почты. Функция возвращает указатель на переданную в неё строку с адресом почты,...

Небольшой шаблонный класс matrix: комментарии/критика относительно кода с точки зрения правильности написания - C++
В плане своего общего развития написал не большой шаблонный класс matrix. Хочу поделиться своей работой с остальными, - может кому то это...

Проверка правильности. - C++
Хочу реализовать проверку вводимого пользователем формата файла ( *.txt к примеру ) как реализовать это ? с помощью регулярок ?

Сомневаюсь в правильности ответа - C++
У меня вот что получилось int n; float sum = 0;float x; x = 10; for(n = 1;n <= 10;n++); { sum = (n+1)/pow(x,n); } ...

Проверка правильности ввода - C++
1)Вывести ошибку в консоль, если в символ пользователь пытается вбить строку. 2)Вывести ошибку в консоль, если строка не является...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
WhiteP
606 / 204 / 23
Регистрация: 20.11.2012
Сообщений: 426
25.02.2013, 22:08 #2
Цитата Сообщение от NinGAZ Посмотреть сообщение
Как правильнее ее описать и вызывать?
Оба варианта неправильны по многим причинам.
void - это ничто. Функция void не должна возвращать значения.
return i+i; "возвращает" адрес умноженный на два.
return *i+*i; - значение по адресу i умноженное на два.
1
Nikcharn
71 / 53 / 3
Регистрация: 31.07.2009
Сообщений: 149
25.02.2013, 22:12 #3
Такой вопрос, а почему в функции вы используете тип void? Если, как я понял вы хотите вернуть тип int.
0
NinGAZ
14 / 14 / 1
Регистрация: 27.07.2011
Сообщений: 162
25.02.2013, 22:13  [ТС] #4
косяк,согласен. суть была не в типе возвращаемого,а описании при отправке адреса/указателя
0
Nikcharn
71 / 53 / 3
Регистрация: 31.07.2009
Сообщений: 149
25.02.2013, 22:38 #5
Еще один вопрос, а переменная i - типа int, или указатель на тип int?
Если это не указатель, то у Вас программа скомпилироваться не должна. По-моему, выйдет ошибка can not convert from int to int*.
У Вас работает?
0
NinGAZ
14 / 14 / 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;
}
а у меня по сути они не указываются. Или это так при работе со структурами?
0
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.
Но каким вариантом пользоваться выбирай сам.
1
NinGAZ
14 / 14 / 1
Регистрация: 27.07.2011
Сообщений: 162
27.02.2013, 18:48  [ТС] #8
Nikcharn, спасибо! очень емко и то что нужно. я как-то упустил разыменовывание,это и ввело в ступор.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.02.2013, 18:48
Привет! Вот еще темы с ответами:

Ошибка в правильности команды... - C++
В понедельник нужно будет показать правильность работы проги... Ошибку пишет тут (декларатион синтаксис еррор ) " bool smezh(edge...

Проверка правильности ввода - C++
Совсем запуталась.Надо ввести целое число. Как сделать так, чтобы при неправильном вводе(символ, буква), выдавалась ошибка?

Проверка правильности тетраэдра - C++
Имеются четыре точки. Каждая имеет координаты x, y и z. Кто-нибудь может подсказать, пожалуйста, как проверить, правильный ли тетраэдр или...

Проверка правильности тетраэдра - C++
Код программы: #include <fstream> //Работа с файлами #include <iostream> //cout - вывод на экран #include <conio.h> //_getch() ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
27.02.2013, 18:48
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru