Помогите, пожалуйста, разобраться с кодом.
void __fastcall TForm1::click6(TObject *Sender)
{
free(data);
}
typedef struct
{
short a;
float b;
char c[16];
} A;
A data_[] =
{
{ 200, 25.178, "C++"},
{ -34, 1234.520, "FORTRAN"},
{ 5, 0.000, "Pascal"},
{ 0}
};
void __fastcall TForm1::click8(TObject *Sender)
{
res_fl->Clear();
char buf[256];
for(A *p = data_; p->a; p++)
{
sprintf(buf, "%5d %8.1f %16s", p->a, p->b, p->c);
text_fl->Lines->Add(buf);
}
}
В готовой программе выходит вот что:
200 25.2 C++
-34 1234.5 FORTRAN
5 0.0 Pascal
В связи с чем возникают вопросы:
Как работает цикл
for(A *p = data_; p->a; p++) и что является концом цикла? Почему он останавливается?
а также непонятна строка
sprintf(buf, "%5d %8.1f %16s", p->a, p->b, p->c); точнее понятна, за исключением этого p->a, p->b, p->c. Что это значит?
Буду благодарен за помощь.
ну это только часть кода, но на вопросы ответить могу.
Вот если у тебя есть структура или класс то доступ к переменным внутри этого класса осуществляется так:
classA var;
var.x = 10;
но это в случае если у тебя обьект этого класса обьявлен обычным способом.
А в твоем коде обьявлен указатель на обьект.
вот в этой строке кода
for(A *p = data_; p->a; p++)
У тебя есть класс А и ты обьявляешь указатель на обьект р. при этом ты вызываешь конструктор копирования с одним аргументом.
То есть -
classA *object; //обьявлен указатель на обьект класса
Потом у тебя есть такая надпись
p->a
тут
р - указатель на обьект
а - переменная внутри обьекта на который указывает р
Короче значок -> заменяет собой точку в случае если у тебя есть указатель на обьект.
И скорее всего а - это переменная логического типа.
p++
тут просто переопределена операция ++
То есть р++ просто означает вызов какой-то функции внутри р.
Если херово обьяснил или остались вопросы то задавай их.