реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Инициализация массивов в C
inventor
сообщение Jan 23 2009, 07:15
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 524
Регистрация: 25-12-08
Из: Москва
Пользователь №: 42 748



Однажды наткнулся на такой тип массива вида array[i, j];
Я делал интерполяцию по ширине и высоте и мне нужно
было передать в функцию двумерный массив,
Всякие попытки преобразования типа не прошли,
и все сделал с помощью указателей.
А вот что это за тип, который я привел вверху
и как сним работать.
Дело в том, что можно написать любое количество переменных внутри
и с многомерным масивом можно будет работать как с одномерным.
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Jan 23 2009, 07:39
Сообщение #2


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Многомерные массивы определяются в Си немного по-другому:
type array_name [N1][N2]...[Nk]
где type - тип, array_name - имя массива, N1...Nk - длина каждой размерности

В памяти такой массив будет представлен как совокупность одномерных массивов, расположенных друг за другом


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
inventor
сообщение Jan 23 2009, 08:55
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 524
Регистрация: 25-12-08
Из: Москва
Пользователь №: 42 748



Цитата(MrYuran @ Jan 23 2009, 10:39) *
Многомерные массивы определяются в Си немного по-другому:
type array_name [N1][N2]...[Nk]
где type - тип, array_name - имя массива, N1...Nk - длина каждой размерности

В памяти такой массив будет представлен как совокупность одномерных массивов, расположенных друг за другом


Это мне известно.
Ве дело в том, что компилятор массив
типа array[x, y, z] хватает и не ругается.
Мне интересна внутренняя форма представления
такого массива.
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Jan 23 2009, 09:10
Сообщение #4


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(inventor @ Jan 23 2009, 11:55) *
Мне интересна внутренняя форма представления
такого массива.

Вот открыл учебник.
многомерный массив, начиная с младшего адреса:
array[x][y][ z]={
(0,0,0),(0,0,1),...(0,0,z-1),
(0,1,0),(0,1,1),...(0,1,z-1),
...
(0,y-1,0),(0,y-1,1),...(0,y-1,z-1),
(1,0,0),(1,0,1),...(1,0,z-1),
...
(1,y-1,0),(1,y-1,1),...(1,y-1,z-1),
.
.
.
(x-1,1,0),(x-1,1,1),...(x-1,1,z-1),
...
(x-1,y-1,0),(x-1,y-1,1),...(x-1,y-1,z-1)
}

Кстати, можно его прямо так инициализировать при объявлении (только без круглых скобок, это я так индексы обозначил, надеюсь понятно)


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
inventor
сообщение Jan 23 2009, 09:19
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 524
Регистрация: 25-12-08
Из: Москва
Пользователь №: 42 748



Цитата(MrYuran @ Jan 23 2009, 12:10) *
Вот открыл учебник.
многомерный массив, начиная с младшего адреса:
array[x][y][ z]={
(0,0,0),(0,0,1),...(0,0,z-1),
(0,1,0),(0,1,1),...(0,1,z-1),
...
(0,y-1,0),(0,y-1,1),...(0,y-1,z-1),
(1,0,0),(1,0,1),...(1,0,z-1),
...
(1,y-1,0),(1,y-1,1),...(1,y-1,z-1),
.
.
.
(x-1,1,0),(x-1,1,1),...(x-1,1,z-1),
...
(x-1,y-1,0),(x-1,y-1,1),...(x-1,y-1,z-1)
}

Кстати, можно его прямо так инициализировать при объявлении (только без круглых скобок, это я так индексы обозначил, надеюсь понятно)


Как проинициализиовать многомерный массив я знаю.
Еще раз говорю, что это за массивы видаarray[i,j,z];
Где их размерности (несколько штук) пишутся внутри скобок.
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Jan 23 2009, 09:23
Сообщение #6


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(MrYuran @ Jan 23 2009, 13:10) *
Вот открыл учебник.

Порядок расположения элементов запоминается на всю жизнь по фразе "кто последний-тот дурак" smile.gif
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Jan 23 2009, 09:56
Сообщение #7


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Что-то я вообще не понимаю сути вопроса.
Почему array[x,y,z] вместо array[x][y][z]?
В стандарте Си такого определения не предусмотрено, это какие-то примочки.


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
dxp
сообщение Jan 23 2009, 10:29
Сообщение #8


Adept
******

Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



Цитата(MrYuran @ Jan 23 2009, 13:39) *
В памяти такой массив будет представлен как совокупность одномерных массивов, расположенных друг за другом

Верно. Потому что в С нету многомерных массивов, а то, что под ними часто подразумевают, является массивами массивов. smile.gif


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
SSerge
сообщение Jan 23 2009, 10:29
Сообщение #9


Профессионал
*****

Группа: Свой
Сообщений: 1 719
Регистрация: 13-09-05
Из: Novosibirsk
Пользователь №: 8 528



Это в Паскале допускается записывать обращение к элементу массива в виде array[x,y,z] наряду с array[x][y][z], в С такого не предусмотрено.
А почему С не ругается на такое smile.gif , так это потому что в С есть такой оператор - "запятая".


--------------------
Russia est omnis divisa in partes octo.
Go to the top of the page
 
+Quote Post
tAmega
сообщение Jan 23 2009, 10:54
Сообщение #10


Местный
***

Группа: Свой
Сообщений: 474
Регистрация: 20-01-09
Из: НН
Пользователь №: 43 639



Цитата(inventor @ Jan 23 2009, 12:19) *
Как проинициализиовать многомерный массив я знаю.
Еще раз говорю, что это за массивы видаarray[i,j,z];
Где их размерности (несколько штук) пишутся внутри скобок.

А почему нельзя объявить этот массив, проинициализировать его числами до компиляции, так чтобы тоже не ругался, и в симуляторе посмотреть, что он там накомпилировал.

Сообщение отредактировал tAmega - Jan 23 2009, 10:56


--------------------
пользователь отключен
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Jan 23 2009, 10:56
Сообщение #11


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(SSerge @ Jan 23 2009, 13:29) *
А почему С не ругается на такое smile.gif

У меня ИАР выругался нецензурно, типа я забыл скобку ] , а дальше ерунду написал


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jan 23 2009, 11:27
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(inventor @ Jan 23 2009, 09:15) *
Однажды наткнулся на такой тип массива вида array[i, j];



Это не 'C'. Посему спрашивайте у производителя того конкретного компилятора об особенностях диалекта и зачем они так сделали.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 15th June 2025 - 17:35
Рейтинг@Mail.ru


Страница сгенерированна за 0.01488 секунд с 7
ELECTRONIX ©2004-2016