Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> массив и ОЗУ 
:(
    Опции темы
mahmed
Дата 20.12.2007, 14:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 20.12.2007

Репутация: нет
Всего: нет



int a[x][y][z][m]
обращается к элементу a[i][j][k][m] через указатель а и операцию разименования "*"
надо расположить массив а для х=2 у=2 z=2 m=3 в ОЗУ

на толкните на путь истинный, можно с исходниками)

Заранее спасибо)
PM MAIL   Вверх
Lazin
Дата 20.12.2007, 14:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 27
Всего: 154



у тебя массив должен быть одномерным, а индекс в нем вычисляться на основе индексов [x][y][z][m], и размерности массива по каждому из индексов.
Для 2х мерного массива 100 * 100 элементов 

Код

int A[10000];
int Height = 100, Width = 100;

int x = 4, y = 20;
//обращение к элементу массива с индексами x, y.
A[y*Width + x] = 0;

PM MAIL Skype GTalk   Вверх
MAKCim
Дата 20.12.2007, 15:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 2
Всего: 207



общее количество памяти для описания массива равно
(x + x * y + x * y * z) * sizeof(void*) + x * y * z * m * sizeof(int)
далее для инициализации пишем функцию
Код

int **** init(void * raw, int x, int y, int z, int m) {
    char * array = raw;
    char * ptr;
    int size = x + x * y + x * y *z;
    int index, __x = x, __y = y, __z = z, __m = m, scale, __xf = 0, __yf = 0, __zf = 0, __mf = 0;
    for (index = 0; index < size; ++index) {
        if (x--)
            scale = __x * sizeof(void*);
        else if (y--) {
            if (!__xf)
                __xf = 1;
            else
                scale = __y * sizeof(void*);
        }
        else if (z--) {
            if (!__yf)
                __yf = 1;
            else
                scale = __z * sizeof(void*);
        }
        else if (m--) {
            if (!__mf)
                __mf = 1;
            else
                scale = __m * sizeof(int);
        }
        ptr += scale;
        *((unsigned long*)array + index) = (unsigned long)ptr;
    }
    return raw;
}



--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
mahmed
Дата 20.12.2007, 15:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 20.12.2007

Репутация: нет
Всего: нет



Код

(x + x * y + x * y * z) * sizeof(void*) + x * y * z * m * sizeof(int)

нескромный вопрос: как мы получили эту формулу? 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0746 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.