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

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

Войти
Регистрация
Восстановить пароль
 
metrolog
4 / 4 / 0
Регистрация: 18.11.2012
Сообщений: 101
#1

Указатель как входной параметр функции - C++

03.04.2013, 09:43. Просмотров 482. Ответов 7
Метки нет (Все метки)

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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#include <iostream> 
const int Max = 5; 
 
int* fill_array(double ar[], int limit); 
void show_array(const double ar[], int* n) ;
int* size;
 
 
int main () 
{ 
using namespace std; 
double properties[Max]; 
size = fill_array(properties, Max); 
show_array(properties, size ); 
 
cin.get (); 
cin.get (); 
return 0; 
} 
 
 
 
int* fill_array(double ar[], int limit) 
{ 
using namespace std; 
double temp; 
int i; 
for (i=0; i<limit; i++) 
{ 
cout << "Enter value #" << (i + 1) <<":" ; 
cin >> temp; 
if (!cin) 
{ 
cin.clear(); 
while (cin.get() != '\n') 
continue; 
cout << "Bad input; input process terminated.\n"; 
break; 
} 
else if (temp < 0) 
break; 
ar[i] = temp; 
} 
int *i1 = &i;
return i1; 
} 
 
 
 
 
 
void show_array(const double ar[], int* n) 
{ 
using namespace std; 
 
for (int i=0; i< (*n); i++) 
{ 
cout << "Property #" << (i + 1) << ": $"; 
cout << ar[i] << endl; 
} 
}
первая функции возвращает указатель. Вторая функция должна его принимать. Но почему то когда она его принимает по этому адресу не то число которое возвратила первая функция. Подскажите, в чем дело?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.04.2013, 09:43     Указатель как входной параметр функции
Посмотрите здесь:

Можно ли передать указатель на функцию как параметр другой функции? - C++
В общем, вопрос. Можно ли, допустим ... int fun1(int x) { ... ... ... return x*1000; }

Указатель на статический массив как параметр шаблона - C++
Добрый день. Необходимо параметр шаблона сделать указателем и передавать в него указатель на статический массив: template&lt;size_t...

работа с файлом через входной параметр - C++
int _tmain(int argc,char* argv) { FILE* F =fopen(argv, &quot;wt+&quot;); когда пишу параметр запуская через командную строку или ярлык,...

Используя указатель, как параметр цикла, распечатать массив с конца, пропуская элементы, кратные 3 - C++
Создать целочисленный массив из 10 элементов. Используя указатель в качестве параметра цикла: распечатать массив с конца, пропуская...

Определить функцию для расчета суммы цифр натурального числа. Входной параметр – число. Возвращаемое значение – сумма. - C++
Помогите пожалуйста написать программу на с++ очень нужно Определить функцию для расчета суммы цифр натурального числа. Входной параметр...

Определить функцию для расчета суммы цифр натурального числа. Входной параметр – число. Возвращаемое значение – сумма - C++
Помогите написать пожалуйста программу на C++ Oпределить функцию для расчета суммы цифр натурального числа. Входной параметр – число....

String как параметр функции - C++
Подскажите, пожалуйста, что здесь не так. При компиляции выдаёт &quot;синтаксическая ошибка: идентификатор &quot;string&quot;&quot;. Пробовал убрать &lt;string&gt; и...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт CЭксперт С++
13051 / 7314 / 814
Регистрация: 27.09.2012
Сообщений: 18,052
Записей в блоге: 3
Завершенные тесты: 1
03.04.2013, 09:48     Указатель как входной параметр функции #2
память, занимаемая переменной i будет освобождена после выхода из функции fill_array

Добавлено через 1 минуту
Вообще не понятно, зачем size делать указателем.
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#include <iostream> 
const int Max = 5; 
 
int fill_array(double ar[], int limit); 
void show_array(const double ar[], int n) ;
int size;
 
 
int main () 
{ 
using namespace std; 
double properties[Max]; 
size = fill_array(properties, Max); 
show_array(properties, size ); 
 
cin.get (); 
cin.get (); 
return 0; 
} 
 
 
 
int fill_array(double ar[], int limit) 
{ 
using namespace std; 
double temp; 
int i; 
for (i=0; i<limit; i++) 
{ 
cout << "Enter value #" << (i + 1) <<":" ; 
cin >> temp; 
if (!cin) 
{ 
cin.clear(); 
while (cin.get() != '\n') 
continue; 
cout << "Bad input; input process terminated.\n"; 
break; 
} 
else if (temp < 0) 
break; 
ar[i] = temp; 
} 
return i; 
} 
 
 
 
 
 
void show_array(const double ar[], int n) 
{ 
using namespace std; 
 
for (int i=0; i< n; i++) 
{ 
cout << "Property #" << (i + 1) << ": $"; 
cout << ar[i] << endl; 
} 
}
metrolog
4 / 4 / 0
Регистрация: 18.11.2012
Сообщений: 101
03.04.2013, 13:26  [ТС]     Указатель как входной параметр функции #3
я знаю что можно так, ну вот хочу чтобы size был указателем и чтобы в функция принимала указатель.

Добавлено через 2 минуты
после fill_array выводил адрес и значение size. Все правильно. А когда вывожу это значение в show_array, по этому адресу неправильное значение лежит.
Croessmah
Модератор
Эксперт CЭксперт С++
13051 / 7314 / 814
Регистрация: 27.09.2012
Сообщений: 18,052
Записей в блоге: 3
Завершенные тесты: 1
03.04.2013, 13:33     Указатель как входной параметр функции #4
Цитата Сообщение от metrolog Посмотреть сообщение
по этому адресу неправильное значение лежит.
После выхода из fill_array все занятые ей ресурсы освобождаются, но никто их не обнуляет и никак не изменяет.
Значение будет правильное до тех пор, пока эту память никто не перезапишет, и когда это произойдет никто не знает.

Если хотите вручную управлять выделением/освобождением памяти, то используйте динамическую память/кучу(heap)
metrolog
4 / 4 / 0
Регистрация: 18.11.2012
Сообщений: 101
03.04.2013, 13:35  [ТС]     Указатель как входной параметр функции #5
и как сделать чтобы на вход принимался именно правильный адрес и то значение?
Croessmah
Модератор
Эксперт CЭксперт С++
13051 / 7314 / 814
Регистрация: 27.09.2012
Сообщений: 18,052
Записей в блоге: 3
Завершенные тесты: 1
03.04.2013, 13:39     Указатель как входной параметр функции #6
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#include <iostream> 
const int Max = 5; 
 
int* fill_array(double ar[], int limit); 
void show_array(const double ar[], int* n) ;
int* size;
 
 
int main () 
{ 
using namespace std; 
double properties[Max]; 
size = fill_array(properties, Max); 
show_array(properties, size ); 
delete size;
cin.get (); 
cin.get (); 
return 0; 
} 
 
 
 
int* fill_array(double ar[], int limit) 
{ 
using namespace std; 
double temp; 
int i; 
for (i=0; i<limit; i++) 
{ 
cout << "Enter value #" << (i + 1) <<":" ; 
cin >> temp; 
if (!cin) 
{ 
cin.clear(); 
while (cin.get() != '\n') 
continue; 
cout << "Bad input; input process terminated.\n"; 
break; 
} 
else if (temp < 0) 
break; 
ar[i] = temp; 
} 
return new int(i); 
} 
 
 
 
 
 
void show_array(const double ar[], int* n) 
{ 
using namespace std; 
 
for (int i=0; i< (*n); i++) 
{ 
cout << "Property #" << (i + 1) << ": $"; 
cout << ar[i] << endl; 
} 
}
metrolog
4 / 4 / 0
Регистрация: 18.11.2012
Сообщений: 101
03.04.2013, 15:28  [ТС]     Указатель как входной параметр функции #7
спасибо
только не понимаю почему вызов size вне функции возвращает правильное значение, а адрес его совпадает с адресом переменной которая вошла в show_array(...)?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.04.2013, 15:33     Указатель как входной параметр функции
Еще ссылки по теме:

Анонимные функции, как параметр - C++
Здравствуйте. Есть проблема - много функций, каждой придумывать имена не хочу, тем более, что они мне не пригодятся. Суть такова: void...

Передача функции как параметр шаблона - C++
Хочу передавать в шаблон любую функцию без параметров и вызывать ее из него. Как это сделать? Не работает, но примерно так должно...

Динамический массив как параметр функции - C++
Господа, прошу Вас помочь с функцией. Собственно говоря, необходимо с помощью функции заполнить несколько двумерный динамических...

Задать функцию как параметр функции - C++
Написал программу для решения уравнения с вырожденным ядром, где по ходу решения вышли две по три идентичные функции. Хотел бы узнать как...

Двумерный массив как параметр функции - C++
Есть такая функция, загружающая элементы из бинарного файла в массив bool m1: void loadfromfile(char *filename, int col, int row) {...


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

Или воспользуйтесь поиском по форуму:
Croessmah
Модератор
Эксперт CЭксперт С++
13051 / 7314 / 814
Регистрация: 27.09.2012
Сообщений: 18,052
Записей в блоге: 3
Завершенные тесты: 1
03.04.2013, 15:33     Указатель как входной параметр функции #8
Цитата Сообщение от metrolog Посмотреть сообщение
а адрес его совпадает с адресом переменной
какой адрес вернули из fill_array,тот и "залез" в указатель size.
Только вот память, на которую указывал этот указатель уже являлась освобожденной и могла быть перезаписана в любой момент. Собственно эта память и перезаписывалась при вызове show_array, поэтому значение менялось.
Yandex
Объявления
03.04.2013, 15:33     Указатель как входной параметр функции
Ответ Создать тему
Опции темы

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