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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.07.2009, 18:04   #1
mazak
Пользователь
 
Аватар для mazak
 
Регистрация: 10.07.2009
Сообщений: 29
Вопрос Массив как структурная переменная

Доброго всем времени суток добрался до структур, и даже до классов, но видно слишком поторопился.
Прошу прощения за названия функций на русский лад, не силен еще в английском...

Загвоздка у меня такая:
списываю прогу про игру Memory.


Код:
struct position {int x; int y;};

class pole_igry
{
public: 

konstructor_polya();

int otkritiye_karty;
int gamer;

pos positions_otkr_kart[2];

int Paare[2];

int InitPole[7][6];
int igrovoe_pole[7][6];

pos otkrito[21][2];

};
затем в конструкторе есть вот такая строчка обращения к структуре через массив

Код:
for (int i=0; i<21; i++)//сначала внешний цикл переберает все свои
                                       //значания
  for (int j=0; j<2; j++)         //Затем внутренний
{
otkrito[i][j].x=-1;// как работает распределение памяти в этом случае?
otkrito[i][j].y=-1;
}
Не доходит до меня как и что происходит когда я через массив структурного типа обращаюсь к элементу структуры?
Как выглядит это все в памяти машины?
Это что для каждого адреса массива например otkrito[10][2] резервируется место для переменной x и также для у?
Но пар то целых 21 штука.
Может я вообще не правильно подхожу к этому вопросу?

Вобщем в этом месте чувствую себя деревом, объясните без пинков пожалуйста, отношение массив-структура .

Заранее благодарен за подсказку.

С уважением mazak.
Благими намерениями вымощена дорога в ад
mazak вне форума Ответить с цитированием
Старый 15.07.2009, 18:13   #2
profi
Участник клуба Подтвердите свой е-майл
 
Регистрация: 19.11.2007
Сообщений: 1,022
По умолчанию

Массив структур - это массив, каждый элемент которого структура.

Цитата:
pos otkrito[i][j];
это двумерный массив структур. Это можно разобрать как массив i-ый элемент которого содержит j структур.

Я считаю, что вам нужно создать одномерный массив структур (этого будет достаточно) вот так

Код:
pos otkrito[21];
.................
for(int i=0;i<21;i++){
otkrito[i].x=-1;
otkrito[i].y=-1;
}

Последний раз редактировалось profi; 15.07.2009 в 18:28.
profi вне форума Ответить с цитированием
Старый 15.07.2009, 18:37   #3
mazak
Пользователь
 
Аватар для mazak
 
Регистрация: 10.07.2009
Сообщений: 29
По умолчанию

Это можно разобрать как массив i-ый элемент которого содержит j структур.

Вот она фраза дня для меня. Спасибо большое.

а на счет одномерного массива тут фишечка в том что что там сохраняется карта одна из двух с определенным индексом картинки
например otkrito[10][0] карта первая индекс 10 (номер картинки)
Благими намерениями вымощена дорога в ад

Последний раз редактировалось mazak; 15.07.2009 в 18:53.
mazak вне форума Ответить с цитированием
Старый 15.07.2009, 19:38   #4
profi
Участник клуба Подтвердите свой е-майл
 
Регистрация: 19.11.2007
Сообщений: 1,022
По умолчанию

otkrito[10][0] - это двумерный массив, а это otkrito[10] - одномерный массив.
Цитата:
а на счет одномерного массива тут фишечка в том что что там сохраняется карта одна из двух с определенным индексом картинки
Не совсем понятно, что вы хотите.
profi вне форума Ответить с цитированием
Старый 15.07.2009, 20:18   #5
mazak
Пользователь
 
Аватар для mazak
 
Регистрация: 10.07.2009
Сообщений: 29
По умолчанию

ну с массивом разобрался а что со строкой
otkrito[i][j].x=-1; что это такое в машинном понимании

если в простой структуре

variable.x=1

то элемент структуры Х принимает значение равное 1

в одномерном массиве
array[0].x=1 переменная Х первой структуры принимает значение равное 1

array[0][1].x=1 переменная Х первого элемента массива второй структуры принимает значение равное 1

Правильно?
Благими намерениями вымощена дорога в ад

Последний раз редактировалось mazak; 15.07.2009 в 20:21.
mazak вне форума Ответить с цитированием
Старый 15.07.2009, 20:23   #6
profi
Участник клуба Подтвердите свой е-майл
 
Регистрация: 19.11.2007
Сообщений: 1,022
По умолчанию

Код:
otkrito[i][j].x=-1; что это такое в машинном понимании
Смотрите, otkrito[i][j] это означает, что каждый i-ый элемент массива otkrito, является массивом из j элементов. Т.е. otkrito[i] в этом выражении otkrito[i][j] означает, что под i-ым элементом хранится адрес на первый элемент уже другого массива из j элементов. Видно я вас уже запутал Попробуйте изобразить на бумаге то что я сказал, думаю тогда поймете.

Последний раз редактировалось profi; 15.07.2009 в 20:31.
profi вне форума Ответить с цитированием
Старый 15.07.2009, 20:39   #7
mazak
Пользователь
 
Аватар для mazak
 
Регистрация: 10.07.2009
Сообщений: 29
По умолчанию

тоесть array[0][1].x=1 означает что в первом элементе хранится адрес второго элемента массива значение которого принимает переменная Х ???

попробую ка я это все в консольке прогнать
Благими намерениями вымощена дорога в ад
mazak вне форума Ответить с цитированием
Старый 15.07.2009, 21:21   #8
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Допустим имеется:
Код:
position a[4][3]
Пишем следующее:
Код:
a[1][0].x = 10;
a[1] - определяется адрес второго элемента "главного" массива, т.е. второй массив.
a[1][0] - для этого второго массива ищем адрес его первого элемента, т.е. структуры position
a[1][0].x - для этой найденной структуры ищем адрес члена x
a[1][0].x = 10 - записываем по этому адресу число 10.

На картинке изображено как это дело примерно в памяти выглядит.
Изображения
Тип файла: gif Безымянный.GIF (2.0 Кб, 61 просмотров)
pu4koff вне форума Ответить с цитированием
Старый 15.07.2009, 21:55   #9
mazak
Пользователь
 
Аватар для mazak
 
Регистрация: 10.07.2009
Сообщений: 29
По умолчанию

спасибо ребята очень доходчиво объяснили буду дальше вникать, сам не знаю вроде все просто , но то ли возраст, то ли природная тупость, иногда не доходит хоть ты тресни.
Благими намерениями вымощена дорога в ад
mazak вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Имя переменной как переменная. Как получить доступ к такой переменной? Denni Microsoft Office Access 8 02.04.2009 10:06
Странная переменная. GreenDan Помощь студентам 6 25.08.2008 19:35
задать массив типа X: array [0..N] of integer -где N переменная читаеться из EditBox Kivin13 Общие вопросы Delphi 22 06.09.2007 09:25
Общая переменная А.Брей Помощь студентам 2 20.05.2007 18:13