Как вы объявляете массив массивов массивов? Скажем, у меня есть массив s[]
. s[0]
будет содержать другой массив a[]
и a[0]
будет содержать массив b[]
. Как бы вы это сделали с указателями?Массив массивов массивов в C
ответ
// b is an array of int. (N is some number.)
int b[N];
// a Option 0: a is an array of M arrays of N int. (M is some number.)
int a[M][N];
// a Option 1: a is an array of M pointers to int.
int *a[M];
a[0] = b;
// Other elements of a must also be assigned in some way.
// s Option 0: s is an array of L arrays of M arrays of N int. (L is some number.)
int s[L][M][N];
// s Option 1: s is an array of L arrays of M pointers to int.
int *s[L][M];
s[0][0] = b;
// Other elements of s must also be assigned in some way.
// s Option 2: s is an array of L pointers to arrays of N int.
int (*s[L])[N];
s[0] = a; // Can use a from a Option 0, not a from a Option 1.
// Other elements of s must also be assigned in some way.
// s Option 3: s is an array of L pointers to pointers to int.
int **s[L];
s[0] = a; // Can use a from a Option 1, not a from a Option 0.
// Other elements of s must also be assigned in some way.
Есть также варианты, в которых каждый объект является указателем на его самом высоком уровне, а не массивом. Я не показал их. Им потребуется определить что-то, на что указывает указатель.
Простой подход.
int length = 10;
int b[5] = {0,1,2,5,4};
int c[7] = {1,2,3,4,5,6,7};
int** s = malloc(sizeof(int*) * length);
s[1] = b;
s[2] = c;
и так далее ...
Этот пример для 2 слоя. Сделать указатель s
***s
и внести соответствующие изменения, чтобы сделать его 3 слоя.
's + 1' и' s + 2' не являются lvalues и не могут быть слева от назначений. Возможно, вы указали 's [1]' и 's [2]'. И это дает 's' всего два слоя, а не три запроса в вопросе. –
@EricPostpischil ya вы правы. 's + 1' не компилируется. Но я думал, что 's + 1' является синтаксическим сахаром' s [1] '. Ссылка: Например, на языке C обозначение a [i] является синтаксическим сахаром для * (a + i) - Wikipedia. –
@EAGER_STUDENT: 's + 1' не' * (s + 1) '. Звездочка делает мир различий. – dreamlax
- 1. Массив массивов в C#
- 2. C# Список массивов массивов массивов
- 3. Массив 2D-массивов C
- 4. C инициализирующий массив массивов
- 5. Массив массивов, отдельных массивов рубин
- 6. Массив массивных массивов числовых массивов
- 7. Массив массивов?
- 8. Как объявить массив массивов C
- 9. C++ массив массивов unsigned char
- 10. Копирование массивов в массив массивов (да?)
- 11. Преобразование нескольких массивов массивов в один массив
- 12. C# P/Invoke массив массивов
- 13. Список массивов массивов массивов
- 14. Как можно разыменовать массив массивов массивов?
- 15. Многомерный массив - массив массивов?
- 16. Копирование массивов в C#
- 17. Cheat Engine Как найти сущность/массив массивов массивов адресов C#
- 18. Массив массивов в Perl
- 19. Массив массивов в Java
- 20. 'Массив массивов' в Matlab?
- 21. Массив массивов в Swift
- 22. DataTable в массив массивов
- 23. Массив массивов в F #
- 24. Массив массивов в TypeScript
- 25. Merge массив в массив массивов
- 26. Отдельный массив в подразделах массивов в C#
- 27. Передача массивов в массив указателей в C
- 28. Swift - массив/массив массивов массивов в/из файла
- 29. Синтаксический - JSON - Массив массивов
- 30. Копирование массивов в C
http://cdecl.org – 2013-05-02 19:36:25
Вы хотите 's [0]' быть массивом или быть указателем на элементы массива? Вы хотите, чтобы 'a [0]' был массивом или был указателем на элементы массива? –
Чтобы уточнить вопросы Эрика: один из них является «умным» индексированием и на самом деле является только одним большим массивом. Другой использует ссылки на фактические ссылки указателя, и конечный многомерный массив больше не смежнее. –