|
|
|
Обычные статические массивы. Но...
|
|||
|---|---|---|---|
|
#18+
Из 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2005, 17:23 |
|
||
|
Обычные статические массивы. Но...
|
|||
|---|---|---|---|
|
#18+
Чё ты нам тут какие-та букавки шлешь ? ты код шли, а не букавки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2005, 17:47 |
|
||
|
Обычные статические массивы. Но...
|
|||
|---|---|---|---|
|
#18+
//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); } ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2005, 20:07 |
|
||
|
Обычные статические массивы. Но...
|
|||
|---|---|---|---|
|
#18+
Сурово, а где Вы учитесь (если не секрет) ? Для начала рекомендуется понять, чем char *snp; отличается от char snp[50]; и почему нельзя писать record array[]; Удачи. Лишний раз убеждаюсь, что бесплатное высшее образование это зло для страны в целом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2005, 22:01 |
|
||
|
Обычные статические массивы. Но...
|
|||
|---|---|---|---|
|
#18+
josiaСурово, а где Вы учитесь (если не секрет) ? Для начала рекомендуется понять, чем char *snp; отличается от char snp[50]; и почему нельзя писать record array[]; Удачи. Лишний раз убеждаюсь, что бесплатное высшее образование это зло для страны в целом. Совсем не секрет! Я уже доучился в Авиационном Университете. Вот только с С++ моя специальность практически никак не была связана:). Так что приходится самому и по книжке понимать, чем указатель на char отличается от массива 50-и элементов типа char. По поводу того, что нельзя писать record array[] - это я в задумчивости. То ли идентификаторы недопустимые использовал (хотя, вроде компилятор ничего не сказал) то ли размерность сразу не указал. Но! На этапе экспериментирования и размерность пробовал указать, и имена другие дать - и все равно. Ну разные адреса! За комментарии спасибо. Я нисколько с самого начала не сомневался, что ошибка какая-то элементарная и связана с моей же неопытностью и бестолковостью. Я подумаю почему нельзя писать record array[]:). Хочется верить, что адреса обязательно примут правильную форму, как только я смогу понять, как исправить указанные Вами ошибки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2005, 08:04 |
|
||
|
Обычные статические массивы. Но...
|
|||
|---|---|---|---|
|
#18+
Вопрос как будто закрыт. Оказалось, что все дело в дебагере. Программа пишет по нужным адресам, а дебаггер, подлец, показывает не то, что есть на самом деле. Спасибо всем, кто принял участие в попытке разрешить эту загадку! :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2005, 13:02 |
|
||
|
Обычные статические массивы. Но...
|
|||
|---|---|---|---|
|
#18+
Timm ThalerВопрос как будто закрыт. Оказалось, что все дело в дебагере. Программа пишет по нужным адресам, а дебаггер, подлец, показывает не то, что есть на самом деле. Спасибо всем, кто принял участие в попытке разрешить эту загадку! :) Во как бывает))) Может дебагер не виноват?))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2005, 16:10 |
|
||
|
Обычные статические массивы. Но...
|
|||
|---|---|---|---|
|
#18+
Lelikk Timm ThalerВопрос как будто закрыт. Оказалось, что все дело в дебагере. Программа пишет по нужным адресам, а дебаггер, подлец, показывает не то, что есть на самом деле. Спасибо всем, кто принял участие в попытке разрешить эту загадку! :) Во как бывает))) Может дебагер не виноват?))) Может быть:) Но как ни странно, строка cout<<&array[cnt].snp; выводит на экран дисплея совсем не то, что на том же этапе показывает дебагер в окошке watch при наблюдении за &array[cnt].snp. Честное слово впервые пишущего на С++. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2005, 17:44 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=33019605&tid=2033454]: |
0ms |
get settings: |
6ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
53ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
38ms |
get tp. blocked users: |
1ms |
| others: | 193ms |
| total: | 320ms |

| 0 / 0 |
