Уведомления
Очистить все

Получение значения массива из класса через указатель  

  RSS
LEV
 LEV
(@lev)
New Member

Создаю класс 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=(*(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=(*(L.p+i)); // Если сюда напрямую написать выражение cout<<(*(L.p+i)); работать не будет. //Корректное значение окажется только в первой строчке массива!!!!

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

}

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

return app.exec();
}

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

p=&Arr[0];

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

}
}

Цитата
Размещено : 05.05.2016 03:20
Aveal
(@aveal)
Администратор Admin

Попробуй в конструкторе класса добавить

p = new float[8];

ОтветитьЦитата
Размещено : 07.05.2016 13:53
LEV
 LEV
(@lev)
New Member

Да, динамическое создание массива), я так и сделал в итоге, спасибо.

ОтветитьЦитата
Размещено : 09.05.2016 22:15
Aveal
(@aveal)
Администратор Admin

Не за что =)

ОтветитьЦитата
Размещено : 10.05.2016 17:57
Поделиться:

Присоединяйтесь!

Profile Profile Profile Profile Profile
Vkontakte
Twitter

Язык сайта

Август 2020
Пн Вт Ср Чт Пт Сб Вс
 12
3456789
10111213141516
17181920212223
24252627282930
31  

© 2013-2020 MicroTechnics.ru