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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.02.2016, 14:38   #1
Мой повелитель
Пользователь
 
Аватар для Мой повелитель
 
Регистрация: 04.01.2016
Сообщений: 93
По умолчанию Не выводится записанное число функцией.

Вот 3 файла:
прототип(заголовочный):
Код:
#ifndef function
#define function
int function32(int);
#endif
Сама функция(исполняемый файл):
Код:
#include "function.h"
int function32(int number)
{
	number = number * 3;
	return number;
}
Ну и конечно-же основная функция,куда-же без неё.Тоже исполняемый файл.
Код:
#include"function.h"
#include<iostream>
#include<ctime>
using namespace std;
int main()
{
	int i = 0;
	setlocale(LC_ALL, "Russian");
	cin >> i;
	cout << function32(i) << endl;
	system("pause");
	return 0;
}
Вот так,функция возвращает результат своей работы и выводит на экран.Но если написать вот так:
Код:
#include"function.h"
#include<iostream>
#include<ctime>
using namespace std;
int main()
{
	int i = 0;
	setlocale(LC_ALL, "Russian");
	cin >> i;
	function32(i);
        cout << i << endl;
	system("pause");
	return 0;
}
то i выведется как число,которое мы ввели.Но функция же перезаписала в i значение(результат нашего числа,которое мы ввели,умноженное на 3).В чём дело?
Мой повелитель вне форума Ответить с цитированием
Старый 27.02.2016, 16:34   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Потому что параметры передаются по значению. Функция переписала СВОЮ КОПИЮ и после выхода из функции КОПИЯ УНИЧТОЖИЛАСЬ и на внешнюю переменную НЕ ПОВЛИЯЛА.
p51x вне форума Ответить с цитированием
Старый 27.02.2016, 19:43   #3
Мой повелитель
Пользователь
 
Аватар для Мой повелитель
 
Регистрация: 04.01.2016
Сообщений: 93
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Потому что параметры передаются по значению. Функция переписала СВОЮ КОПИЮ и после выхода из функции КОПИЯ УНИЧТОЖИЛАСЬ и на внешнюю переменную НЕ ПОВЛИЯЛА.
А как сделать так,чтобы копию не создавала,а сделал это с действительной переменной?
Мой повелитель вне форума Ответить с цитированием
Старый 27.02.2016, 20:21   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

передать по ссылке.

Код:
int function32(int &number)
{
	number = number * 3;
	return number;
}
теперь number это ссылка, и все изменения с ней отразятся на оригинальной переменной.
но теперь нельзя будет вызвать function32(5), там как требуется переменная.
(но это к слову)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 27.02.2016, 20:41   #5
vvmcpp
Форумчанин
 
Аватар для vvmcpp
 
Регистрация: 11.12.2010
Сообщений: 116
По умолчанию

Можно передать функции указатель .
Например так:

Код:
#include <iostream>

using namespace std;

void function32(int *number)
{
	*number = *number * 3;
	//return number;
}

int main()
{


    int i = 0;
	setlocale(LC_ALL, "Russian");
	cin >> i;
	function32(&i);
    cout << i << endl;
	//system("pause");


    return 0;
}
vvmcpp вне форума Ответить с цитированием
Старый 27.02.2016, 20:45   #6
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Только зачем, когда есть ссылки? С указателями автор еще больше запутается.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
не выводится дробное число.float, ошибка,int main felker Общие вопросы C/C++ 2 04.02.2015 12:26
Написать схематично программу с функцией, возвращающей целое число и число с десятичной точкой(Экзам. вопрос). datileo Visual C++ 1 22.06.2011 09:49
выводится n-е число Фибоначчи amikulia Помощь студентам 10 14.01.2011 20:45
Неправильное число выводится в Edit T-dayne Помощь студентам 1 18.05.2010 20:40