Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/12: Рейтинг темы: голосов - 12, средняя оценка - 4.67
OVERPOWER8
19 / 19 / 2
Регистрация: 29.11.2009
Сообщений: 224
1

Как передать функции значение int?

06.02.2010, 02:35. Просмотров 2131. Ответов 16
Метки нет (Все метки)

Пытаюсь передать функции значение int, но не получается.
Синтаксически все правильно, но не компилируется. Как сделать так, шоб работало, НЕ меняя *& ?

Вот ошибка:
Bash
1
2
3
test.cpp: In function ‘int main()’:
test.cpp:20: error: invalid initialization of reference of type ‘int*&’ from expression of type ‘int’
test.cpp:4: error: in passing argument 2 of ‘bool Factor(int, int*&, int*&)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <iostream>
using namespace std;
 
bool Factor(int number, int* &pSquared, int* &pCubed);
 
int main()
{
    bool error;
    
    int number, squared, cubed;
    number = 18;
    
    error = Factor(number, squared, cubed);
    
    if(!error)
    {
        cout << "number: " << number << endl;
        cout << "squared: " << squared << endl;
        cout << "cubed: " << cubed << endl;
    }
    
    return 0;
}
 
bool Factor(int number, int* &pSquared, int* &pCubed)
{
    if(number > 20)
        return true;
    else
    {
        *pSquared = number*number;
        *pCubed = number*number*number;
        return false;
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.02.2010, 02:35
Ответы с готовыми решениями:

Как передать 0 в функцию типа f (int, int&)
Подскажите, почему при повторных вызовах f остается предыдущее значение S?...

Как передать значение из функции
Всем доброе время суток! Такой вопрос, у меня есть функция, с неё нужно...

как с помощю ссылки передать с функции значение F
как с помощю ссылки передать с функции значение F (строка21-22) в main на...

Как передать значение из одной функции в другую?
Как передать значение s из функции main() в функцию poisk()? Как передать...

Передать массив чисел типа Int функции
Всем привет. Столкнулся с проблемой передачи числового массива функции. Этот...

16
HIMen
4261 / 1428 / 101
Регистрация: 12.04.2009
Сообщений: 2,346
06.02.2010, 02:40 2
убери все звездочки
0
OVERPOWER8
19 / 19 / 2
Регистрация: 29.11.2009
Сообщений: 224
06.02.2010, 02:45  [ТС] 3
>> HIMen

Ты не понял, надо чтобы:
1. функция Factor работала с указателями
2. Передавать функции 3 значения int.
0
HIMen
4261 / 1428 / 101
Регистрация: 12.04.2009
Сообщений: 2,346
06.02.2010, 02:48 4
Это ты определись что передавать: сcылки, указатели, указатели на ссылки (оО) или int?
Мне кажется, тебе нужно ссылки --- удали все звездочки
0
OVERPOWER8
19 / 19 / 2
Регистрация: 29.11.2009
Сообщений: 224
06.02.2010, 02:51  [ТС] 5
>> HIMen

Надо передать функции 3 значения типа int!

Функция принимает 3 значения: int, и два указателя на адресы переменных.
С двумя последними значениями функция должна работать как с указателями.

Прототип функции:
Factor(int, int* &, int* &);

Вызов функции:
int Var1, Var2, Var3;
Factor(Var1, Var2, Var3);
0
HIMen
4261 / 1428 / 101
Регистрация: 12.04.2009
Сообщений: 2,346
06.02.2010, 02:56 6
на с++ не пишу, но помню что передача параметров бывает двух типов:
1. по значению (происходит копирование переменной)
2. по ссылке (переменная изменяется)
В твоем очень странном коде, надо передавать по ссылке.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <iostream>
using namespace std; 
bool Factor(int number, int &pSquared, int &pCubed); 
int main()
{
    bool error;        
    int number, squared, cubed;
    number = 18;        
    error = Factor(number, squared, cubed);        
    if(!error)
    {
        cout << "number: " << number << endl;
        cout << "squared: " << squared << endl;
        cout << "cubed: " << cubed << endl;
    }
    system("pause");        
    return 0;
} 
bool Factor(int number, int &pSquared, int &pCubed)
{
    if(number > 20) return true;
    else
    {
        pSquared = number*number;
        pCubed = number*number*number;
        return false;
    }
}
0
OVERPOWER8
19 / 19 / 2
Регистрация: 29.11.2009
Сообщений: 224
06.02.2010, 03:00  [ТС] 7
>> HIMen

Это легкий способ, но мне надо, чтоб функция работала с указателями!

Проблема в передаче значения:
Function(int* &, int* &) - работает,
однако
Function(int, int* &, int* &) - не работает!
0
HIMen
4261 / 1428 / 101
Регистрация: 12.04.2009
Сообщений: 2,346
06.02.2010, 03:14 8
C++
1
2
bool Factor(int number, int *pSquared, int *pCubed)
error = Factor(number, &squared, &cubed);
это тоже самое что по ссылке
0
zim22
depict1
276 / 141 / 4
Регистрация: 11.07.2009
Сообщений: 606
06.02.2010, 11:01 9
OVERPOWER8, я не понимаю, зачем ты передаёшь указатель по ссылке
ведь ты не изменяешь адрес указателя в функции.
Цитата Сообщение от OVERPOWER8 Посмотреть сообщение
Function(int, int* &, int* &)
0
OVERPOWER8
19 / 19 / 2
Регистрация: 29.11.2009
Сообщений: 224
06.02.2010, 11:34  [ТС] 10
>> zim22

я не понимаю, зачем ты передаёшь указатель по ссылке
ведь ты не изменяешь адрес указателя в функции.
Да ради удобства. Чтобы запускать так:
Factor(intOne, intTwo, intThree);

а не
Factor(intOne, &intTwo, &intThree);

и чтобы функция работала непосредственно с указателями.
(так надо, я лишь структуру описал).
0
zim22
depict1
276 / 141 / 4
Регистрация: 11.07.2009
Сообщений: 606
06.02.2010, 11:45 11
если я не ошибаюсь, то твой код не должен компилиться.
т.к. 2 и 3 параметр функции - это указатели.
а ты передаёшь туда int.

C++
1
2
3
4
bool Factor(int number, int* &pSquared, int* &pCubed);
 
int number, squared, cubed;
error = Factor(number, squared, cubed);
0
OVERPOWER8
19 / 19 / 2
Регистрация: 29.11.2009
Сообщений: 224
06.02.2010, 12:22  [ТС] 12
если я не ошибаюсь, то твой код не должен компилиться.
т.к. 2 и 3 параметр функции - это указатели.
а ты передаёшь туда int.

C++
1
2
3
4
bool Factor(int number, int* &pSquared, int* &pCubed);
 
int number, squared, cubed;
error = Factor(number, squared, cubed);
Ты ошибаешься!
Код должен работать, т. к. функция извлекает адрес переменной int, и присваивает его указателю.
ПОЧЕМУ НЕ должно компилироваться!?
0
novi4ok
551 / 504 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
06.02.2010, 13:54 13
вот так будет работать:
C++
1
2
3
4
5
6
7
8
9
    int squared = 0;
    int cubed = 0;
 
    int *pSq = &squared;
    int *pCb = &cubed;
    int number = 18;
    int *&zhopa_squared = pSq;
    int *&zhopa_cubed = pCb;
    bool error = Factor(number, zhopa_squared, zhopa_cubed);
хотя это - через ж*пу

зачем все усложнять? тут думаешь, как сложные вещи попроще и попонятнее представить, а тут, похоже, противоположная задача поставлена: напишу 2Х2 чтоб ни одна зараза не поняла как оно устроено.
0
zim22
depict1
276 / 141 / 4
Регистрация: 11.07.2009
Сообщений: 606
06.02.2010, 14:57 14
Цитата Сообщение от OVERPOWER8 Посмотреть сообщение
Код должен работать, т. к. функция извлекает адрес переменной int
не умеет функция "извлекать" адрес переменной.
0
OVERPOWER8
19 / 19 / 2
Регистрация: 29.11.2009
Сообщений: 224
06.02.2010, 16:31  [ТС] 15
Вот, как надо:
Почему иногда функции передается значение int, а иногда - нет?
0
novi4ok
551 / 504 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
06.02.2010, 17:13 16
так это и коню было понятно, что параметр, который ф-я будет менять, нужно объявлять или ссылкой, или указателем, а не тем кандибобером, как в твоем первом примере. ты ведь нигде не спрашивал, как люди делают такие вещи. ты спросил, почему твоя абракадабра не работает

а то имей ввиду, что самый прямой способ - это вот так:

C++
1
2
3
4
5
6
7
8
9
void getInt222 (int *pInt){
   *pInt = 222;
}
 
int i;
 
getInt222 (&i);
 
// now the value of i is 222
0
opa_opa
3 / 3 / 0
Регистрация: 06.02.2010
Сообщений: 13
06.02.2010, 17:51 17
Цитата Сообщение от OVERPOWER8 Посмотреть сообщение
и чтобы функция работала непосредственно с указателями.
(так надо, я лишь структуру описал).
C++
1
bool Factor(int number, int* pSquared, int* pCubed);
При этом, при вызове функции, ты должен ей передавать адреса переменных.

Добавлено через 22 минуты
Цитата Сообщение от OVERPOWER8 Посмотреть сообщение
Код должен работать, т. к. функция извлекает адрес переменной int, и присваивает его указателю.
Тогда твой пример реализуется следующим образом:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
bool Factor(int number, int* pSquared, int* pCubed);
 
int main()
{ 
     ...
     ...
     ...
     int a,b,c;
     bool d;
     d=Factor (a, &b, &c);
     ...
     ...
     ...
return 0;
}
0
06.02.2010, 17:51
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.02.2010, 17:51

Как передать значение функции класса в другую функцию?
имеется класс class Test { public: int getB() { return B; } ...

Как передать значение переменной из одной функции в другую функцию
нужно передать значение sum1 , sum2 , sum3 из каждой функции в главную ....

Как передать указатель функции, чтобы значение переменной изменилось?
Имеются переменная и указатель на нее. int x, *y = &amp;x; Как передать указатель...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Опции темы

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