Почему нельзя двумерный массив преобразовывать в указатель на указатель? - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Имеем массив:
int daytab[2][13];
при передаче его в функции количество столбцов должно быть определено:
f(int daytab[][13]) { ... }
или
f(int (*daytab)[13]) { ... }
В книге есть
If a two-dimensional array is to be passed to a function, the parameter declaration in the function must include the number of columns; the number of rows is irrelevant, since what is passed is, as before, a pointer to an array of rows, where each row is an array of 13 ints. In this particular case, it is a pointer to objects that are arrays of 13 ints.
но почему так? По какой причине это сделанно? т.е. почему нельзя двумерный массив преобразовывать в указатель на указатель? например f(int **p) { ... }

Решение задачи: «Почему нельзя двумерный массив преобразовывать в указатель на указатель?»

textual
Листинг программы
int *pArr = new int*[5];

Объяснение кода листинга программы

В данном коде:

  1. Создается двумерный массив pArr типа int* размером 5.
  2. Для каждого элемента массива pArr выделяется память под указатель на int с помощью оператора new.
  3. В итоге, каждый элемент массива pArr будет указывать на отдельный блок памяти, выделенный под int.
  4. При желании, можно разыменовывать указатель pArr и получить доступ к каждому из выделенных блоков памяти, как к одномерному массиву.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4.333 из 5
Похожие ответы