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

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

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

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

03.04.2013, 09:43. Просмотров 495. Ответов 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; 
} 
}
первая функции возвращает указатель. Вторая функция должна его принимать. Но почему то когда она его принимает по этому адресу не то число которое возвратила первая функция. Подскажите, в чем дело?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.04.2013, 09:43
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Указатель как входной параметр функции (C++):

Указатель на структуру, как параметр функции - C++
Господа программисты! Прошу вашей помощи! Помогите передать функции в качестве аргумента указатель на структуру. Вот что есть: struct...

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

Как передать параметр типа "указатель на указатель" в функцию? - C++
#include &quot;stdafx.h&quot; #include &lt;conio.h&gt; #include &lt;iostream&gt; using namespace std; #include &lt;iomanip&gt; using std::setiosflags; ...

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

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

Быстрее ли вывов функции, переданной через параметр шаблона, чем через простой указатель на функцию? - C++
Здравствуйте! Есть два варианта передачи некоторой переменной типа &quot;указатель на функцию&quot; в класс - через параметр шаблона и просто с...

7
Croessmah
Эксперт CЭксперт С++
13419 / 7573 / 855
Регистрация: 27.09.2012
Сообщений: 18,646
Записей в блоге: 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; 
} 
}
0
metrolog
4 / 4 / 0
Регистрация: 18.11.2012
Сообщений: 101
03.04.2013, 13:26  [ТС] #3
я знаю что можно так, ну вот хочу чтобы size был указателем и чтобы в функция принимала указатель.

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

Если хотите вручную управлять выделением/освобождением памяти, то используйте динамическую память/кучу(heap)
1
metrolog
4 / 4 / 0
Регистрация: 18.11.2012
Сообщений: 101
03.04.2013, 13:35  [ТС] #5
и как сделать чтобы на вход принимался именно правильный адрес и то значение?
0
Croessmah
Эксперт CЭксперт С++
13419 / 7573 / 855
Регистрация: 27.09.2012
Сообщений: 18,646
Записей в блоге: 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; 
} 
}
1
metrolog
4 / 4 / 0
Регистрация: 18.11.2012
Сообщений: 101
03.04.2013, 15:28  [ТС] #7
спасибо
только не понимаю почему вызов size вне функции возвращает правильное значение, а адрес его совпадает с адресом переменной которая вошла в show_array(...)?
0
Croessmah
Эксперт CЭксперт С++
13419 / 7573 / 855
Регистрация: 27.09.2012
Сообщений: 18,646
Записей в блоге: 3
Завершенные тесты: 1
03.04.2013, 15:33 #8
Цитата Сообщение от metrolog Посмотреть сообщение
а адрес его совпадает с адресом переменной
какой адрес вернули из fill_array,тот и "залез" в указатель size.
Только вот память, на которую указывал этот указатель уже являлась освобожденной и могла быть перезаписана в любой момент. Собственно эта память и перезаписывалась при вызове show_array, поэтому значение менялось.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.04.2013, 15:33
Привет! Вот еще темы с ответами:

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

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

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

Как получить ссылку на указатель или указатель на указатель в массиве? - C++
В процессе реализации сортировки пузырьком натолкнулся на такую проблему: как поменять значения указателей, передаваемых в функцию. Если...


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

Или воспользуйтесь поиском по форуму:
8
Yandex
Объявления
03.04.2013, 15:33
Ответ Создать тему
Опции темы

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