:: Не фоксом единым
Фичи
alex;
Автор

Сообщений: 2855
Откуда: Москва
Дата регистрации: 23.11.2004
Открыл для себя зубчатые(jagged) массивы.
Оказывается Java и C# позволяют такие вещи
int[][] matrix = new int[3][];
matrix[0] = {1, 2, 3, 4, 5, 6};
matrix[1] = {1, 2, 3};
matrix[2] = {1};

int[][][][] matrix;
matrix = new int[2][][][]; // создаем массив «ссылок на ссылки на ссылки» длины 2
for (int i = 0; i < matrix.Length; i++)
{
matrix[i] = new int[3][][]; // создаем массив «ссылок на ссылки» длины 3
for (int j = 0; j < matrix[i].Length; j++)
{
matrix[i][j] = new int[4][]; // создаем массив ссылок длины 4
for (int k = 0; k < matrix[i][j].Length; k++)
matrix[i][j][k] = new int[5]; // создаем массивы целых чисел длины 5
}
}

А в обычном Си у встроенных массивов нет даже свойства Length - видимо используют собственные контейнеры на указателях и своих типах.
Ratings: 0 negative/0 positive
Re: Фичи
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
В обычном Си массив это просто адрес блока памяти, где по очереди хранятся элементы (одного и того же типа). Размер массива как таковой нигде не хранится (он используется лишь во время компиляции, а не во время исполнения). Синтаксис myArray[i] это просто вариант разыменования указателя. Он идентичен операции *(myArray+i) (взять значение элемента по указателю myArray сдвинутому на i элементов - т.е. по сути адрес полученный как адрес_нулевого_элемента+i*sizeof(тип_элемента)).

Многомерные массивы в Си чем-то похожи на фоксовые - они просто абстракция над всё тем же линейным блоком памяти где по очереди хранятся все элементы массива. Но т.к. в Си "указатель" это совершенно нормальный/полноценный тип, и позволяет работать с собой как с любым другим типом данных, то вполне можно сделать "массив указателей", а значит и реализовать jagged массив - это будет массив указателей на отдельные (при том разного размера, и расположенных не "подряд" в памяти) массивы. Естественно что в данном случае придётся самому заботиться о проверках выхода за границы массива, т.е. вероятно где-то ещё и размерности этих самых массивов сохранять - впрочем, это совершенно обычное дело для си, и источник 99% всех багов и косяков в коде


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Фичи
medstrax
Забанен

Сообщений: 5964
Дата регистрации: 23.03.2007
Igor Korolyov
Естественно что в данном случае придётся самому заботиться о проверках выхода за границы массива, т.е. вероятно где-то ещё и размерности этих самых массивов сохранять - впрочем, это совершенно обычное дело для си, и источник 99% всех багов и косяков в коде

ну на голом си в 2020 пишут редко, а в плюсах с STL проблема неактуальна.
Ratings: 0 negative/0 positive
Re: Фичи
S-type

Сообщений: 2969
Дата регистрации: 24.04.2004
alex;
А в обычном Си у встроенных массивов нет даже свойства Length - видимо используют собственные контейнеры на указателях и своих типах.

Давно так не смеялся...

Ещё в 91-м году преподаватель объяснил, что в Си массив - это просто кусок памяти..
Ratings: 0 negative/0 positive
Re: Фичи
alex;
Автор

Сообщений: 2855
Откуда: Москва
Дата регистрации: 23.11.2004
А что смешного в том, что в 95 когда нам давали плюсы, я работал и пропустил почти всё?

Таки я бы тоже посмеялся, вот про Lint есть какие шутки?
Ratings: 0 negative/0 positive
Re: Фичи
alex;
Автор

Сообщений: 2855
Откуда: Москва
Дата регистрации: 23.11.2004
мтк все так же в 21 веке создаются малые электронные системы, на которые переносятся системы
написанные на С и современные анализаторы исходного кода позволяют быстро создавать компиляторы для языков низкого уровня
для новых систем. А языки высокого уровня в помощь.
Ratings: 0 negative/0 positive
Re: Фичи
alex;
Автор

Сообщений: 2855
Откуда: Москва
Дата регистрации: 23.11.2004
Оказывается можно логировать инициализацию

public class Main
{
public static void main(String[] args)
{
ChildClass obj = new ChildClass();
}
public static String print(String text)
{
System.out.println(text);
return text;
}
}
class ParentClass
{
public String a = Main.print("ParentClass.a");
}
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 2 (Гостей: 2)

© 2000-2024 Fox Club 
Яндекс.Метрика