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

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

Войти
Регистрация
Восстановить пароль
 
Stanis
52 / 41 / 8
Регистрация: 16.12.2012
Сообщений: 144
#1

Объясните что не так с указателем в программе - C++

07.01.2013, 20:11. Просмотров 272. Ответов 3
Метки нет (Все метки)

Функция defStart возвращает указатель на int . В main другой указатель присваивает значение(адрес) возвращенного указателя. Затем в цикле вывожу значения используя нотацию массива
C++
1
 cout<<result[i]<<" ";
И Вместо
1 0 0 0 в консоль выводит 1 9083459837 9083409587340 0983459839487 . Зато если я вывожу вот так
C++
1
cout<<*result<<" ";
, то получаю ожидаемый результат 1 0 0 0 . Объясните почему так ? Ведь я не
инкрементирую указатель при выводе вторым способом и почему при нотации массива получается какая то билиберда .

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
#include<iostream>
using namespace std;
 
int * defStart(int x,int y)
   {
       int vector[4]={0,0,0,0};
       if(x==0)
       {vector[3]=1;}//направление вниз
       else if(x==11)
       {vector[2]=1;}//направление вверх
       if(y==0)
       {vector[0]=1;}//направление вправо
       else if(y==11)
       {vector[1]=1;}//направление влево
 
       return vector;
   }
 
int main()
{
    int *result=defStart(2,0);
    for(int i=0;i<=3;i++)
       {
           cout<<*result<<" ";
       }
    cout<<endl;
    system("pause");
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.01.2013, 20:11     Объясните что не так с указателем в программе
Посмотрите здесь:

ошибка в программе, что не так.. C++
C++ что не так в программе? Виснет при компиляции
что не так в программе, выдает ошибку... C++
C++ Что не так в программе? (цикл While)
C++ Что не так в программе для нахождения факториала?
C++ Помогите исправить ошибки в программе. Не пойму что не так
C++ Что-то не так в программе (при нажатии кнопок со стрелками по консоли движется символ)
Литерал - что делать с указателем? C++
С моим кодом что-то не так! на калькуляторе одно число,а в программе другое( C++
В чем разница между указателем и указателем на указатель? C++
C++ Объясните разницу между указателем и ссылкой
C++ Коментарии к программе. Объясните пожалуйста что выполняют функции

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
NoMasters
Псевдослучайный
1744 / 1087 / 71
Регистрация: 13.09.2011
Сообщений: 3,111
07.01.2013, 20:37     Объясните что не так с указателем в программе #2
Это потому, что не надо возвращать указатели на локальные переменные, они живут лишь до выхода из функции(области видимости в общем случае).
DU
1480 / 1056 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
07.01.2013, 20:41     Объясните что не так с указателем в программе #3
вообще возвращается указатель на объект, который тут же умирает при выходе из функции defStart.
так что поведение вообще неопределено. может выводится что угодно. чтобы понять, почему на разных итерациях выводятся разные значения нужно копаться в дизассемблере. можно предположить что память, где раньше находился вектор по мере вызова функции "cout<<*result<<" ";" перезаписывается по всякому (внутри ведь наверняка используются переменные, которые что-то со стеком делают).
Stanis
52 / 41 / 8
Регистрация: 16.12.2012
Сообщений: 144
07.01.2013, 20:46  [ТС]     Объясните что не так с указателем в программе #4
Thanks everybody всем помогавшим , Вы правы .
Yandex
Объявления
07.01.2013, 20:46     Объясните что не так с указателем в программе
Ответ Создать тему
Опции темы

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