Вопрос вот какой. Для одного из проектов - потребовалось научится возвращать двумерный массив из функции. Посмотрел пару -тройку видео по С++. Написал код. Код (C++): int** getArray () { int** arr = new int* [3]; for (int i = 0; i < 3; i ++) { arr [i] = new int [3]; for (int k = 0; k < 3; k ++) { arr[i][k] = i+k; } } return arr; } void setup() { Serial.begin (9600); for (int a = 0; a < 100; a ++) { int** arr = getArray(); Serial.println (arr[2][2]); } } void loop() { } Вопросов два: 1) после 53 раза ответ "4" (верный) меняется на "4353", что очень похоже на указатель на память или что-то подобное. Сосбвтенно, вопрос - почему? 2) Почему запись содержит два ** int** arr = new int* [3]; ведь по-сути создается массив в каждой ячейке которого лежит просто указатель на другой массив, то есть это - массив из указателей. Тот же вопрос и тут: int** arr (указатели на указатели?)
Черепить сейчас вообще не хочу, но я делаю так: Код (C++): uint8_t data[9]; .... data[5] = SHT1x_Get_Humidity; SHT_USI_Start_Transceiver(&data[5]); в самой функции: Код (C++): uint8_t SHT_USI_Start_Transceiver (uint8_t *data) { USIDR = *data; ..... *(data++) = SHT_USI_Transfer (USISR_8bit); ..... *data = SHT_USI_Transfer (USISR_8bit); ..... } Возвращается у меня data[5] и data[6].
int** arr это указатель на указатель. int arr1[10]; int *arr2 = arr1; arr1 это массив. В памяти размещается один объект - масссив из 10ти целых чисел. arr2 это указатель на массив. В памяти размещается адрес массива arr2. Замечаем, что имя массива без квадратных скобок автоматически приводится к указателю на элемент массива. Т.е. arr2 принимает значение &(arr1[0]).
А вопрос на засыпку - в одномерном массиве элементы массива расположены друг за другом, а в двухмерном или даже трехмерном как? Как в таких массивах обращаться к элементам не через порядковый номер элемента, а через указатель?
Кто или что мешает написать тривиальный код и посмотреть? Код (C++): static const int n2[3][2] = { 1, 2, 3, 4, 5, 6 }; void setup(void) { Serial.begin(57600); const int * ptr = & n2 [0][0]; for (int8_t i = 0; i < 6; i ++) { Serial.print(* ptr ++); Serial.print(' '); } Serial.println(); } void loop(void) {}