2017-11-11 1 views
0
void enterTwoArrays() 
{ 
    printf("Enter m!\n"); 
    scanf("%d",&m); 
    printf("Enter n!\n"); 
    scanf("%d",&n); 
    int arr[m][n]; 

    printf("Enter m2!\n"); 
    scanf("%d",&m2); 
    printf("Enter n2!\n"); 
    scanf("%d",&n2); 
    int arr2[m2][n2]; 

    for(i=0; i<=m-1; i++) 
    { 
     for(j=0; j<=n-1; j++) 
     { 
      scanf("%d",&arr[i][j]); 
     } 
    } 

    for(i=0; i<=m2-1; i++) 
    { 
     for(j=0; j<=n2-1; j++) 
     { 
      scanf("%d",&arr2[i][j]); 
     } 
    } 
} 

void addition(int arr[m][n], int arr2[m2][n2]) 
{ 
    int arr3[m][n]; 
    for(i=0; i<=m-1; i++) 
    { 
     for(j=0; j<=n-1; j++) 
     { 
      arr3[i][j]=arr[i][j]+arr2[i][j]; 
     } 
    } 
} 

안녕하세요, 문제가 있습니다. C에서 두 함수가 있습니다. 첫 번째 함수에서는 배열을 만들고 채 웁니다. 두 번째 함수는 두 개의 배열 값을 더합니다. 그러나 내가하려고 할 때, 프로그램은 부서진다. 문제가 어디 있는지 알 것 같습니다. 자사의 사촌 내 배열은 일종의 지역 및 나는 나중에 메인에서 두 번째 기능을 보낼 수 없습니다. 그러면 어떻게 그 문제를 해결할 수 있을까요? main과 be4 main에서 n과 m 변수를 모른 채 이들 배열을 선언 할 수 없습니다.배열을 C로 전역 배열로 만드는 방법은 무엇입니까?

+0

포인터를 배열에 전달할 수 있습니다. –

+0

배열의 포인터를 함수의 인수로 전달하십시오. –

+0

코드 자체에 본질적으로 잘못된 것은 하나도 없지만 최소한 "m2"와 "n2"는 각각 "m"과 "n"만큼 커야합니다. 주어진 run에 해당하지 않으면,'addition()'함수는 그것의 경계 밖에서'arr2'에 접근을 시도 할 것입니다. 아마도 하나의 공통된 차원 집합을 읽고 두 배열에 모두 사용해야합니다. –

답변

0

포인터를 전역으로 선언하고 사용자가 행과 열을 가져온 후에 메모리를 할당 할 수 있습니다. 여기서는 두 행렬에 대해 같은 행과 열을 취했습니다. 행렬을 추가하는 데 필요한 조건이기 때문입니다.

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

int *arr; 
int *arr2; 
int row; 
int col; 
void enterTwoArrays() 
{ 
    int i,j,t=0; 
    printf("Enter rows!\n"); 
    scanf("%d",&row); 
    printf("Enter cols!\n"); 
    scanf("%d",&col); 

    arr=(int*)malloc(row *col *sizeof(int)); 
    arr2=(int*)malloc(row *col *sizeof(int)); 

    printf("Enter the first matrix:\n"); 

    for(i=0; i<(row*col); i++) 
    { 
     scanf("%d",(arr+i)); 
    } 

    printf("Enter the second matrix:\n"); 
    for(i=0; i<(row*col); i++) 
    { 
     scanf("%d",(arr2+i)); 
    } 

} 

void addition(int *arr, int *arr2) 
{ 
    int *arr3; 
    int i; 

    arr3=(int*)malloc(row*col*sizeof(int)); 

    for(i=0; i<row*col; i++) 
    { 
     *(arr3+i)=*(arr+i)+*(arr2+i); 
    } 

    printf("The matrix after addition is: \n"); 
    int j,t=0; 

    for(i=0;i<row;i++) 
    { 
     for(j=0;j<col;j++,t++) 
     { 
      printf("%d ",*(arr3+t)); 
     } 
     printf("\n"); 
    } 
} 

void main() 
{ 
    enterTwoArrays(); 
    addition(arr,arr2); 
} 
관련 문제