Передача 2D-массива в качестве двойного указателя в C - PullRequest
0 голосов
/ 02 ноября 2019

Как бы я мог передать 2D-массив следующей функции

arrayInput(char **inputArray)

, а затем получить доступ к массиву, используя стандартный синтаксис 2D-массива

inputArray[][]

В частности, янужно иметь возможность вызывать atoi(inpuArray[0]) для преобразования массива символов в int. Я знаю, что это не лучшим образом, но это требование проекта, чтобы заставить его работать таким образом.

Ответы [ 2 ]

1 голос
/ 03 ноября 2019

В этом случае это будет не двумерный массив char, а массив указателей типа char *. Например:

void arrayInput(char **inputArray) {
    printf("%s\n", inputArray[0]);
    printf("%s\n", inputArray[1]);
}

int main() {
    char* strings[] = { "hello", "world" };
    arrayInput(strings);
}

Тип strings имеет тип char*[] (массив указателей на символ), который уменьшается до char** (указатель на указатель на символ).

-

Для истинного 2D-массива, где строки объединяются в одном и том же буфере памяти, размерность второй строки должна быть частью типа. Например,

void arrayInput(int mat[][2]) {
    printf("%d %d\n", mat[0][0], mat[0][1]);
    printf("%d %d\n", mat[1][0], mat[1][1]);
}

int main() {
    int mat[][2] = { {1, 2}, {3, 4} };
    arrayInput(mat);
}

Здесь mat имеет тип int[2][2], который уменьшается до int[][2] (массив массива 2 int) и int(*)[2] (указатель на массив 2 int).

1 голос
/ 03 ноября 2019

Функция arrayInput принимает указатель на массив указателей. Это отличается от 2D-массива, который является массивом массивов символов. Предполагая, что вы должны сохранить прототипы и определение данных, вы можете создать массив точек, соответствующих прототипу. Однако вам необходимо знать фактические размеры inputArray (пример кода предполагается N, M). Кроме того, код предполагает, что каждый элемент inputArray имеет нулевое окончание.

// Caller Function
// N, M are needed.
    char inputArray[N][M] ;
// Fill inputArray

    // Temporary array, holding pointer to each element
    char *p[N] ;
    for (int i=0 ; i<N ; i++ ) p[i] = inputArray[i] ;
    arrayInput(p) ;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...