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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 21, средняя оценка - 4.95
Aliru777
1 / 1 / 0
Регистрация: 03.11.2011
Сообщений: 71
#1

Функция возвращающая указатель на int - C++

07.07.2012, 05:43. Просмотров 3018. Ответов 4
Метки нет (Все метки)

Не могу понять ошибки.
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
// prata 7 pt to function.cpp : Defines the entry point for the console application.
//
 
#include "stdafx.h"
#include "iostream"
#include <conio.h>
 
using namespace std;
 
int* f(int);
 
int _tmain(int argc, _TCHAR* argv[])
{
    int *ptf=f(7);
    cout<<(*ptf)<<endl;
    cout<<ptf<<endl;
    int *ptf1=f(9);
    cout<<(*ptf1)<<endl<<(ptf1);
    getch();
 
    return 0;
}
 
int* f(int a)
{
    a*=a;
    int* pt=&a;
    return pt;
}
Возвращает странные значения хотя по-моему должна возвращать сначала 49, потом 81.
С адрессом все в порядке.
А так возвращает то что нужно
C++
1
2
3
4
5
6
7
8
9
10
11
int _tmain(int argc, _TCHAR* argv[])
{
    int *ptf=f(7);
    cout<<*ptf;
    cout<<endl<<ptf<<endl;
    int *ptf1=f(9);
    cout<<*ptf1;
    cout<<endl<<ptf1<<endl;
    getch();
    return 0;
}
Это особенности работы сout?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.07.2012, 05:43     Функция возвращающая указатель на int
Посмотрите здесь:
C++ Функция возвращающая абсолютное разницу первого и второго параметров и функция типа int, возвращающая минимальное из трех целых чисел
C++ Функция, возвращающая указатель
C++ Функция, возвращающая указатель
C++ Функция, возвращающая указатель
Функция, возвращающая указатель на функцию C++
C++ Функция, возвращающая указатель на структуру
C++ Функция, возвращающая умный указатель
C++ Функция, возвращающая указатель на структуру
Структура и функция, возвращающая указатель на структуру C++
C++ Функция, возвращающая указатель на двумерный массив
C++ Рекурсивная функция, возвращающая указатель на объект
_beginthread и функция возвращающая int C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
07.07.2012, 07:08     Функция возвращающая указатель на int #2
По моему, вся заморочка в том, что функция f() возвращает указатель на локальную переменную a, которая, после выхода из функции, уже не существует.

Добавлено через 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
#include <conio.h>
#include "iostream"
using namespace std;
 
int* f(int*);
 
int main()
{
    int n = 7;
    int *ptf = f(&n);
    cout << *ptf << endl;
    cout << ptf << endl;
    n = 9;
    int *ptf1 = f(&n);
    cout << *ptf1 << endl << ptf1;
    getch();
    
    return 0;
}
 
int* f(int *a)
{
    (*a) *= (*a);
    
    return a;
}
Aliru777
1 / 1 / 0
Регистрация: 03.11.2011
Сообщений: 71
07.07.2012, 19:58  [ТС]     Функция возвращающая указатель на int #3
Да у меня тоже работает я не пойму почему не раотает 1 вариант?
yekka
385 / 149 / 8
Регистрация: 12.05.2011
Сообщений: 450
07.07.2012, 20:08     Функция возвращающая указатель на int #4
тебе же сказали, что твоя ошибка в том, что твоя функция возвращает указатель на локальную переменную, которая уничтожается как только ты вышел из этой функции
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
08.07.2012, 04:12     Функция возвращающая указатель на int #5
Цитата Сообщение от Aliru777 Посмотреть сообщение
Да у меня тоже работает я не пойму почему не раотает 1 вариант?
Почему первый вариант не работает я уже написал. Странно, что второй работает. Точно не знаю, но предполагаю, что это как-то связано с работой стека. При первом вызове cout<<*ptf; переменная ещё существует, после этого там уже мусор. В любом случае - это ошибка.
Yandex
Объявления
08.07.2012, 04:12     Функция возвращающая указатель на int
Ответ Создать тему
Опции темы

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