Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.79/19: Рейтинг темы: голосов - 19, средняя оценка - 4.79
19 / 19 / 2
Регистрация: 29.11.2009
Сообщений: 224
1

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

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

Author24 — интернет-сервис помощи студентам
Пытаюсь передать функции значение 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.02.2010, 02:35
Ответы с готовыми решениями:

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

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

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

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

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

Ты не понял, надо чтобы:
1. функция Factor работала с указателями
2. Передавать функции 3 значения int.
0
4337 / 1506 / 101
Регистрация: 12.04.2009
Сообщений: 2,342
06.02.2010, 02:48 4
Это ты определись что передавать: сcылки, указатели, указатели на ссылки (оО) или int?
Мне кажется, тебе нужно ссылки --- удали все звездочки
0
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
4337 / 1506 / 101
Регистрация: 12.04.2009
Сообщений: 2,342
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
19 / 19 / 2
Регистрация: 29.11.2009
Сообщений: 224
06.02.2010, 03:00  [ТС] 7
>> HIMen

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

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

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

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

и чтобы функция работала непосредственно с указателями.
(так надо, я лишь структуру описал).
0
depict1
281 / 146 / 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
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
556 / 510 / 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
depict1
281 / 146 / 4
Регистрация: 11.07.2009
Сообщений: 606
06.02.2010, 14:57 14
Цитата Сообщение от OVERPOWER8 Посмотреть сообщение
Код должен работать, т. к. функция извлекает адрес переменной int
не умеет функция "извлекать" адрес переменной.
0
19 / 19 / 2
Регистрация: 29.11.2009
Сообщений: 224
06.02.2010, 16:31  [ТС] 15
Вот, как надо:
Почему иногда функции передается значение int, а иногда - нет?
0
556 / 510 / 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
4 / 4 / 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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.02.2010, 17:51
Помогаю со студенческими работами здесь

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

Как значение вектора передать из одной функции в другую?
Помогите, пожалуйста. Элементы матрицы заданы соотношением. Определить функцию, которая формирует с...

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

Как передать аргументу в функции-члене значение переменной
Здравствуйте! Хочу передать в аргументы функции-члена значение переменной, которая имеет...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru