Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Qt и кроссплатформенное программирование С/С++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.05.2016, 01:10   #1
dima040891
Пользователь
 
Регистрация: 22.05.2013
Сообщений: 21
По умолчанию Получение значения массива из класса через указатель.

Недавно начал осваивать классы c++. возникли некоторые трудности с получением значения массива из класса через указатель.

Суть вопроса:

Создаю класс TestClass. В этом классе в секции public пишу прототип функции void f1 () и переменную класса указатель *p. в методе класса f1 создаю массив float Arr[8] и присваиваю *p адрес 0-го элемента массива. Далее в этом методе заполняю этот массива цифрами 10.001, 11.001…. 17.001. В main пытаюсь вывести значения массива Arr на экран в цикле cout<<(*(L.p+i))<<endl. Но вместо ожидаемого 10.001, 11.001…. 17.001 получаю:

10.001
9.27494e-039
1.83307e-038
1.86731e-038
3.65773e-005
15.001
9.27483e-039
17.001

Причём если выводить напрямую без цикла и прописывать cout<<(*(L.p+1))<<endl, cout<<(*(L.p+i2))<<endl… работает нормально

Ещё пытался создать промежуточный массив H[8] и сначала туда записать данные массива Array (H[i]=(*(L.p+i)) то становилось немного лучше:

10.001
11.001
12.001
13.001
14.001
15.001
9.27482e-039
17.001

Ну собственно вопрос что за явление ну или что я делаю не то…?
Надеюсь расписал понятно. Полный код программы:

Код:
#include <QCoreApplication>
#include <iostream>
#include <math.h>
using namespace std;

class TestClass
{
public:
void f1 ();
float *p;
};

int main(int argc, char *argv[])
{
QCoreApplication app(argc, argv);
int N;
N=8;
TestClass L;
L.f1();
float H[8];
for (int i=0; i<= 7; i++)
{
H[i]=(*(L.p+i)); // Если сюда напрямую написать выражение cout<<(*(L.p+i)); работать не будет. //Корректное значение окажется только в первой строчке массива!!!!

//cout<<(*(L.p+i))<<endl;

}

for (int i=0; i<= 7; i++)
{
cout<<H[i]<<endl; // Поэтому сначала записываювсе в промежуточный массив, а потом только вывожу на экран
}

return app.exec();
}

void TestClass::f1()
{
float Arr[8];

p=&Arr[0];

for(int i=0; i<= 8-1; i++)
{
Arr[i] = 10.001+i;

}
}

Последний раз редактировалось Alex11223; 15.05.2016 в 13:04.
dima040891 вне форума Ответить с цитированием
Старый 05.05.2016, 05:37   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

Цитата:
float Arr[8];

p=&Arr[0];
У вас массив локальный и уничтожится при выходе из функции. То что у вас что-то печатает просто везение и стечение обстоятельств. Раз завеи указатель, так и создавайте массив динамически.
p51x вне форума Ответить с цитированием
Старый 05.05.2016, 07:17   #3
dima040891
Пользователь
 
Регистрация: 22.05.2013
Сообщений: 21
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
У вас массив локальный и уничтожится при выходе из функции. То что у вас что-то печатает просто везение и стечение обстоятельств. Раз завеи указатель, так и создавайте массив динамически.
Благодарю Вас p51x, теперь причину понял . Массив создал динамически.
dima040891 вне форума Ответить с цитированием
Старый 15.05.2016, 13:03   #4
pdatools
Новичок
Джуниор
 
Регистрация: 15.05.2016
Сообщений: 1
По умолчанию

Код:
#include <QCoreApplication>
#include <iostream>
using namespace std;

class gueue
{
    public:
        QString *out();
};
QString* gueue::out()
{
    QString *d = new QString[10];
    for(int n = 0;n < 10;n++)
        d[n] = QStringLiteral("data").arg(n);
    return d;
}

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    gueue c;
    cout << c.out()<<endl;
    return a.exec();
}
pdatools вне форума Ответить с цитированием
Старый 15.05.2016, 18:23   #5
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

pdatools, к чему ваш пост? Зачем лезете в чужую тему?
p51x вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Возврат значения метода через указатель dkii Общие вопросы C/C++ 2 05.02.2014 16:51
получение первого значения многомерного массива serrgggeee PHP 4 29.11.2013 13:14
Получение значения из float* массива zeich Общие вопросы C/C++ 4 10.05.2012 11:43
Обращение к элементам массива через указатель Miha85193 Общие вопросы Delphi 21 19.07.2010 18:43
Обращение к элементам массива через указатель в С++ серг Помощь студентам 1 24.11.2009 01:30