2017-11-11 333 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中獲得了這兩個函數。這個想法是,在第一個函數中,我將創建並填充數組。第二個函數將添加兩個數組的值。但是當我嘗試時,編程就會崩潰。我想我知道問題在哪裏。它的cuz我的數組是本地的,我不能將它們發送到主函數的第二個函數。那麼我該如何解決這個問題呢?我不能在不知道n和m變量的情況下在main/be4 main中聲明這些數組。如何讓我的數組在C函數全局作出?

+0

您可以將指針傳遞給數組。 –

+0

將函數指針作爲參數傳遞給數組。 –

+0

我的代碼本身沒有任何內在的錯誤,但它依賴於'm2'和'n2'分別至少和'm'和'n'一樣大。如果在給定的運行中不是這種情況,那麼函數'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); 
}