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

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

Восстановить пароль Регистрация
 
metrolog
4 / 4 / 0
Регистрация: 18.11.2012
Сообщений: 101
03.04.2013, 09:43     Указатель как входной параметр функции #1
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++ Определить функцию для расчета суммы цифр натурального числа. Входной параметр – число. Возвращаемое значение – сумма.
Определить функцию для расчета суммы цифр натурального числа. Входной параметр – число. Возвращаемое значение – сумма C++
Указатель на статический массив как параметр шаблона C++
C++ Как получить ссылку на указатель или указатель на указатель в массиве?
C++ работа с файлом через входной параметр
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,919
Записей в блоге: 2
Завершенные тесты: 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
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,919
Записей в блоге: 2
Завершенные тесты: 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
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,919
Записей в блоге: 2
Завершенные тесты: 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++
Реализация двоичных деревьев поиска: Зачем в параметрах функции используется указатель на указатель C++
Быстрее ли вывов функции, переданной через параметр шаблона, чем через простой указатель на функцию? C++

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

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

Текущее время: 22:49. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru