2015-04-17 3 views
-4

Раздел функции никогда не вводится в следующем коде , пожалуйста, помогите мне!Как передать 2D-массив в качестве параметра в C?

#include<stdio.h> 
int findMax(int *a[], int m, int n)//this function is not entering 
{ 
    int i,j,k=0; 
    for(i=0;i<m;i++) 
     for(j=0;j<n;j++) 
     if(k<a[i][j]) 
      k=a[i][j]; 
    printf("hi");//this hi is also not printing 
       //this hi is just for testing 
    return k; 
} 

// Эта функция исправить, если это возможно

int main() 
{ 
    int m,n,a[50][50],i,j,k=0; 
    printf("Enter the number of rows in the matrix\n"); 
    scanf("%d",&m); 
    printf("Enter the number of columns in the matrix\n"); 
    scanf("%d",&n); 
    printf("Enter the elements in the matrix\n"); 
    for(i=0;i<m;i++) 
    for(j=0;j<n;j++) 
    { 
     scanf("%d",&a[i][j]); 
    } 
    printf("The matrix is"); 
    for(i=0;i<m;i++) 
    { 
    printf("\n"); 
    for(j=0;j<n;j++) 
     printf("%d ",a[i][j]); 
    } 
    k=findMax((int **)a,m,n);//statements after this is never running but no 
          //compilation errors 
    printf("\nThe maximum element in the matrix is %d",k); 
    return 0; 
} 

пожалуйста, помогите мне !! Спасибо вам заранее!

+0

Что делать, если я поставил 'm' и' n' как 201 и 403? –

+1

Вы использовали отладчик, чтобы узнать, что произойдет? –

+0

@SamiKuhmonen Я уже выполнил, и он показывает так, как ошибка времени компиляции – Arun

ответ

0
int findMax(int *a[], int m, int n) 

int *a[] представляет собой массив указателей на int, вы хотите указатель на массив из 50-х int:

int findMax(int (*a)[50], int m, int n) 

или

int findMax(int a[][50], int m, int n) 

Вам не нужно литой, назовите его, используя:

k = findMax(a, m, n); 

Или вы можете использовать плоский массив, пример:

#include <stdio.h> 

void foo(int *arr, int rows, int cols) 
{ 
    int i, j; 

    for (i = 0; i < rows; i++) { 
     for (j = 0; j < cols; j++) 
      printf("%d ", arr[i * cols + j]); 
     printf("\n"); 
    } 
} 

#define ROWS 3 
#define COLS 3 

int main(void) 
{ 
    int arr[ROWS * COLS]; 
    int i, j; 

    for (i = 0; i < ROWS; i++) { 
     for (j = 0; j < COLS; j++) 
      arr[i * COLS + j] = i * COLS + j; 
    } 
    foo(arr, ROWS, COLS); 
    return 0; 
} 

Если вы не знаете размеры 2d массива заранее вы можете использовать malloc:

#include <stdio.h> 
#include <stdlib.h> 

void foo(int *arr, int rows, int cols) 
{ 
    int i, j; 

    for (i = 0; i < rows; i++) { 
     for (j = 0; j < cols; j++) 
      printf("%d ", arr[i * cols + j]); 
     printf("\n"); 
    } 
} 

int main(void) 
{ 
    int i, j, rows, cols; 
    int *arr; 

    printf("Num of rows:"); 
    scanf("%d", &rows); 
    printf("Num of cols:"); 
    scanf("%d", &cols); 
    arr = malloc(rows * cols); 
    if (arr == NULL) { 
     perror("malloc"); 
     exit(EXIT_FAILURE); 
    } 
    for (i = 0; i < rows; i++) { 
     for (j = 0; j < cols; j++) 
      arr[i * cols + j] = i * cols + j; 
    } 
    foo(arr, rows, cols); 
    free(arr); 
    return 0; 
} 
+0

последнее может не работать, потому что это a [50] [50] ' – BLUEPIXY

+0

@BLUEPIXY, я не понимаю, где проблема с' a [50] [50] '? –

+0

m и n - это не просто использование этой части. – BLUEPIXY

0

, что вы делаете здесь: int findMax(int *a[], int m, int n) пытается указать int int 50 раз, но вы хотите указать на переменный тип int 50 раз. поэтому вы хотите уклонить указатель до того, как вы уменьшите массив.

использование для этого:

int findMax(int (*a)[], int m, int n) 

это должно работать без литья

просто превратить его в:

k=findmax(a,m,n); 

here простой учебник по этому вопросу.

+0

@BLUEPIXY Я не понимаю, что вы имеете в виду? Вы можете объяснить, пожалуйста? – BRHSM

+0

@BLUEPIXY спасибо, я изменил его – BRHSM

+0

'int (* a) []' недействителен. не может компилироваться. – BLUEPIXY

0
#include <stdio.h> 
#include <limits.h> 

#define MATRIX_SIZE 50 

int findMax(int a[MATRIX_SIZE][MATRIX_SIZE], int m, int n){ 
    //Valid any of the following is 
    //int a[MATRIX_SIZE][MATRIX_SIZE] 
    //int a[][MATRIX_SIZE] 
    //int (*a)[MATRIX_SIZE] 
    int i, j, k=INT_MIN; 
    for(i=0;i<m;i++) 
     for(j=0;j<n;j++) 
      if(k<a[i][j]) 
       k=a[i][j]; 
    return k; 
} 

int main(void){ 
    int m, n, a[MATRIX_SIZE][MATRIX_SIZE], i, j, k=0; 

    printf("Enter the number of rows(<=50) in the matrix\n"); 
    scanf("%d",&m); 
    printf("Enter the number of columns(<=50) in the matrix\n"); 
    scanf("%d",&n); 
    if(m < 1 || n < 1 || m > 50 || n > 50){ 
     printf("invalid input!\n"); 
     return -1; 
    } 
    printf("Enter the elements in the matrix\n"); 
    for(i=0;i<m;i++) 
     for(j=0;j<n;j++) 
      scanf("%d",&a[i][j]); 

    printf("The matrix is"); 
    for(i=0;i<m;i++){ 
     printf("\n"); 
     for(j=0;j<n;j++) 
      printf("%d ",a[i][j]); 
    } 
    k=findMax(a, m, n); 
    printf("\nThe maximum element in the matrix is %d\n", k); 

    return 0; 
} 
Смежные вопросы