powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Обычные статические массивы. Но...
8 сообщений из 8, страница 1 из 1
Обычные статические массивы. Но...
    #33018796
Timm Thaler
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Из debuger-а:

arr: 2413:0BB4
cnt: 5
&arr[cnt]: 0000:0C22
&arr[5]: 2413:0C22

Здесь:
arr - статический массив, член некоторого разрабатываемого класса (public), элементы массива в свою очередь являются записями (это не я извращенец, это задание у меня такое на курсовую...);
cnt - переменная типа int, тоже член класса (public);

Попытка заполнить массив arr происходит в конструкторе. В принципе, массив заполняется, но не в том сегменте памяти... При этом содержимое _DS и до, и после операции присваивания arr[cnt] значения содержит 2413h!!! Никак не могу понять, почему при использовании в качестве индекса массива константы с адресами все в порядке, а при использовании переменной все... не в порядке. И как-таки заполнить этот массив с использованием переменной-индекса, желательно без особых нагромождений с адресами, их суммированием и проч.

PS: Turbo C v3.0
...
Рейтинг: 0 / 0
Обычные статические массивы. Но...
    #33018880
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чё ты нам тут какие-та букавки шлешь ? ты код шли, а не букавки.
...
Рейтинг: 0 / 0
Обычные статические массивы. Но...
    #33019108
Timm Thaler
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
//date.h
#include<iostream.h>
#include<string.h>
#include<stdlib.h>
#include<conio.h>

class date
{protected:
short year,month,day;
short error_flag;
public:
int ndate;
char *message;
date (char *kyear="1900", char *kmonth="1", char *kday="1")
{message="";
error_flag=0;
year=short(atoi(kyear));
month=short(atoi(kmonth));
day=short(atoi(kday));
if ((year<=0)||(year>=10000))
{message=strcat(message,"\nYear format error!");
error_flag=1;
};
if ((month<=0)||(month>=13))
{message=strcat(message,"\nMonth format error!");
error_flag=1;
};
if ((day<=0)||(day>=32))
{message=strcat(message,"\nDay format error!");
error_flag=1;
};
if (error_flag==0)
ndate=year*366+month*31+day;
else
ndate=0;
};
};
//--------------------------------------------
//note.h
#include "date.h"

struct record
{ char *snp;
char *phone;
date birthday;
};

class note
{ private:
int cnt;
public:
record array[];
note();
void load_from_file();
void save_to_file();
void add_record();
void delete_record();
void print_array(int);
void sort_by_snf();
void sort_by_phone();
void sort_by_age();
void year_list_year();
void year_list_counter();
void find_by_date_phone();
void find_by_date_age();
void find_by_date_snf();
void find_by_phone();
void find_by_month_phone();
void find_by_month_age();
void find_by_month_snf();
};
//---------------------------------------------------
#include "note.h"
#include<stdio.h>
note::note()
{array[50];
cnt=0;
char key;
key='y';
while ((key=='Y')||(key=='y'))
{cout<<"\nCreate a new record? (Y/N)";
l1: key=(char)getch();
if (!((key=='Y')||(key=='y')||(key=='N')||(key=='n')))
goto l1;
if ((key=='Y')||(key=='y'))
{cout<<"\n"<<&array[0];
cout<<"\n"<<&array[cnt];
cout<<"\nInput surname, name and patronymic: ";
cin.getline(array[cnt].snp,50);
cout<<("\nInput phone number: ");
cin.getline(array[cnt].phone,50);
cnt++;
};
};
};

void main()
{clrscr();
note aaa;
aaa.print_array(3);
}
...
Рейтинг: 0 / 0
Обычные статические массивы. Но...
    #33019189
Фотография josia
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сурово, а где Вы учитесь (если не секрет) ?
Для начала рекомендуется понять, чем char *snp; отличается от char snp[50]; и почему нельзя писать record array[];
Удачи.
Лишний раз убеждаюсь, что бесплатное высшее образование это зло для страны в целом.
...
Рейтинг: 0 / 0
Обычные статические массивы. Но...
    #33019339
Timm Thaler
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
josiaСурово, а где Вы учитесь (если не секрет) ?
Для начала рекомендуется понять, чем char *snp; отличается от char snp[50]; и почему нельзя писать record array[];
Удачи.
Лишний раз убеждаюсь, что бесплатное высшее образование это зло для страны в целом.

Совсем не секрет! Я уже доучился в Авиационном Университете. Вот только с С++ моя специальность практически никак не была связана:). Так что приходится самому и по книжке понимать, чем указатель на char отличается от массива 50-и элементов типа char. По поводу того, что нельзя писать record array[] - это я в задумчивости. То ли идентификаторы недопустимые использовал (хотя, вроде компилятор ничего не сказал) то ли размерность сразу не указал. Но! На этапе экспериментирования и размерность пробовал указать, и имена другие дать - и все равно. Ну разные адреса!
За комментарии спасибо. Я нисколько с самого начала не сомневался, что ошибка какая-то элементарная и связана с моей же неопытностью и бестолковостью. Я подумаю почему нельзя писать record array[]:). Хочется верить, что адреса обязательно примут правильную форму, как только я смогу понять, как исправить указанные Вами ошибки.
...
Рейтинг: 0 / 0
Обычные статические массивы. Но...
    #33019442
Timm Thaler
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вопрос как будто закрыт. Оказалось, что все дело в дебагере. Программа пишет по нужным адресам, а дебаггер, подлец, показывает не то, что есть на самом деле. Спасибо всем, кто принял участие в попытке разрешить эту загадку! :)
...
Рейтинг: 0 / 0
Обычные статические массивы. Но...
    #33019569
Фотография Lelikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Timm ThalerВопрос как будто закрыт. Оказалось, что все дело в дебагере. Программа пишет по нужным адресам, а дебаггер, подлец, показывает не то, что есть на самом деле. Спасибо всем, кто принял участие в попытке разрешить эту загадку! :)

Во как бывает))) Может дебагер не виноват?)))
...
Рейтинг: 0 / 0
Обычные статические массивы. Но...
    #33019605
Timm Thaler
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Lelikk Timm ThalerВопрос как будто закрыт. Оказалось, что все дело в дебагере. Программа пишет по нужным адресам, а дебаггер, подлец, показывает не то, что есть на самом деле. Спасибо всем, кто принял участие в попытке разрешить эту загадку! :)

Во как бывает))) Может дебагер не виноват?)))

Может быть:) Но как ни странно, строка cout<<&array[cnt].snp; выводит на экран дисплея совсем не то, что на том же этапе показывает дебагер в окошке watch при наблюдении за &array[cnt].snp. Честное слово впервые пишущего на С++.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Обычные статические массивы. Но...
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]