#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])
{
}