я хочу назвать этот 3d массив

#arrays #c #function #pointers

Вопрос:

как я могу использовать эту функцию это 3D массив ,который я хочу отсканировать у пользователя номер строки,столбца, ячейки, а затем отправить 3D массив

 
   #include <stdio.h>

    void School (int(*ptr)[int col][int cell] );//this is a user function 

    void main (void){
    int row ;//number of row 
    int col ;//number of colum
    int cell ;//number of cell
    
    printf("Enter Number OF School Layers n");
    scanf("%d",amp;row);
    printf("Enter Number OF Classes in each Layer n");
    scanf("%d",amp;col);
    printf("Enter Number OF Students in each Class n");
    scanf("%d",amp;cell);
    

    
    int arr [row][col][cell];
    
    

    School(arr,row,col,cell);//calling of function 

    }
    void School (int(*ptr)[int col][int cell] ){//i want what write here
    
    }
 

в этом коде у меня проблема

Комментарии:

1. я хочу отсканировать у пользователя номер строки, столбца и ячейки, а затем отправить 3D-массив

2. Что вы подразумеваете под «отправить 3D-массив»? Каков был бы результат этого?

3. «я хочу отсканировать у пользователя номер строки ,столбца,ячейки», Эта часть, похоже, уже выполнена вашим кодом.

4. Это School(arr,row,col,cell);//calling of function не соответствует прототипу void School (int(*ptr)[int col][int cell] );//this is a user function . Попытка вызова дает четыре параметра, прототип заявляет, что должен быть только один. Можете ли вы решить, какой из них вы хотите?

Ответ №1:

Сначала вам нужно обновить прототип функции, чтобы принять размеры перед параметром массива (фактически указатель на массив).

 void School (int rows, int cols, int cells, int arr[rows][cols][cells]);
 

Затем вызовите его как:

 School(row, col, cell, arr); 
 

Фактический код сканирования будет:

 void School (int rows, int cols, int cells, int arr[rows][cols][cells]) {
for (int row = 0; row < rows;   row)
for (int col = 0; col < cols;   col)
for (int cell = 0; cell < cells;   cell)
   scanf("%d", amp;arr[row][col][cell]);
}

 

GCC имеет расширения, которые позволяют объявлять параметры перед их передачей.

 void School (int rows, cols, cells; int arr[rows][cols][cells], int rows, int cols, int cells);
 

Это позволит вам вызвать функцию как:

 School(arr, row, col, cell);
 

Комментарии:

1. Большое тебе спасибо, мой друг, я благодарен тебе за помощь мне..

Ответ №2:

 void School (size_t layers, size_t col, size_t cell, int (*ptr)[col][cell])
{
        
}