Я пытаюсь получить массив указателей на 2d массивы булевых. Как это можно достичь? Это для Arduino (думаю, что это сочетание C и C++?)C/C++ массив указателей на 2d массивы
ответ
Массив указателей на 2D-массивы булевых выглядит так (как на C, так и на C++ - выберите один, они не совпадают языка, ни смесь):
typedef bool TwoDBoolArr[10][10];
typedef TwoDBoolArr *TwoDBoolArrPtr;
typedef TwoDBoolArrPtr TwoDBoolArrPtrArray[10];
Вам нужен последний typedef
, конечно.
Если вы хотите меньше определений типов и снижение читаемости:
typedef bool (*TwoDBoolArrPtrArray[10])[10][10];
На основании вашего описания, я думаю, что вы ищете что-то вроде:
bool (*arr[K])[M][N];
Это ломает, как
arr -- arr
arr[K] -- is a K-element array
*arr[K] -- of pointers
(*arr[K])[M] -- to M-element arrays
(*arr[K])[M][N] -- of N-element arrays
bool (*arr[K])[M][N] -- of bool
можно объявить его без объявления M и N, т.е. если вы хотел иметь 2d массивы разных размеров? – holmeswatson
№ Размер массива является частью типа; например, массив элементов 3x4 типа 'bool' является другим типом из массива элементов 4x5 из' bool', а указатель на один несовместим с указателем на другой. –
Если вы используете C++, и вы не хотите вводить размер из объявления, вы можете сделайте это, выделив его динамически.
int first_dim, second_dim;
// determine dimensions somewhere inside code
// create array of pointers to booleans
bool** arr[10];
for(i = 0; i < 10; i++){
arr[i] = new bool*[first_dim];
for(j = 0; j < first_dim; j++){
arr[i][j] = new bool[second_dim];
}
}
Убедитесь, что вы delete
все ваши массивы, когда вы сделали их использование.
ПРИМЕЧАНИЕ
Когда вы пытаетесь выделить 2d массивы, не думать о них как матрицы или таблицы, каждый из которых хранит логическое значение. Например, возьмите массив из int
s, массив, объявленный как int arr[i][j]
, каждый элемент в первом «измерении» имеет тип int*
, и каждый элемент во втором «измерении» имеет тип int
. Так что это фактически «массив массивов», если хотите.
(обратите внимание на OP, это будет менее эффективно, потому что 2-мерные массивы не будут смежными) –
возможно, но как еще он это сделает, так как он не хочет знать, что 'first_dim' и' second_dim' будут известны от начала? (см. комментарии к ответу на @JohnBode выше) – naxchange
он мог выделять каждый 'arr [n]' как 1-d массивы вместо 2-мерного массива и вручную индексировать 'arr [n] [second_dim * i + j]' (это то, что я сделал бы, если бы производительность имела значение) –
- 1. 2d массивы указателей
- 2. 2D массив указателей на массив указателей на массив STRUCT
- 3. 2D-массив для указателей
- 4. Массив указателей на 2D-массивы, читает неверные значения
- 5. Массив указателей на многомерные массивы
- 6. Массивы указателей на массивы?
- 7. указатель на 2d массив указателей
- 8. 2D массив ссылок на массивы
- 9. 2d массив указателей C++
- 10. Куча выделяет 2D-массив (не массив указателей)
- 11. 2D-массив, содержащий массивы
- 12. Как объявить массив указателей на массивы int?
- 13. Как правильно установить массив указателей на массивы?
- 14. Объявив массив указателей на массивы символов
- 15. Как объявить массив указателей на многомерные массивы
- 16. Массив указателей на двумерные массивы C++
- 17. Как выделить массив указателей на массивы
- 18. Как сохранить массив указателей 2D-массива C++
- 19. Как выделить 2D-массив указателей на структуру
- 20. Slice 2d массив в меньшие 2d массивы
- 21. Массивы указателей
- 22. C++ - указатели на массивы - массивы указателей
- 23. Flatten 2D массив на отдельные индексированные массивы
- 24. с - статический 2d массив указателей на 2d массивов
- 25. Динамическое распределение указателей на массивы
- 26. Какова точка указателей на массивы?
- 27. Ошибочное поведение при обработке указателей на 2D-массивы в C
- 28. передачи указателей на символьные массивы
- 29. Массив указателей на целые
- 30. Выделяют 2D массив в C (не массив указателей) в Heap
Вы хотите синтаксис объявления или что? –
http://stackoverflow.com/questions/1768294/how-to-allocate-a-2d-array-of-pointers-in-c – noMAD
Вы ищете массив или динамическое распределение (т. Е. «Массив» [подробнее или менее] определенного размера, известного только во время выполнения)? Это будет сделано иначе в 'C', чем в' C++' для динамического выделения. – RageD