2017-11-14 7 views
0

int main()에 전역 변수로 정의한 행렬 a[][]을 변수로 초기화하지 않았습니다. I 및 적절한 범위 J 모든이를 인수 매트릭스 a으로 수신하여 특정 값 (랜덤)로 a[i][j]을 정의C의 매트릭스 : 함수가 로컬 변수를 공유합니까?

  • 첫번째는 :

    그러면 I 일부 기능을 사용했다. 이 함수는 단순히 1을 반환합니다.

  • 두 번째 것 : 행렬 a을 인수로 받고 단순히 인쇄합니다. 또한이 함수는 단순히 1을 반환합니다.

  • 마지막 : 인자 행렬 a로 수신하고, 소박, 생각

값의 값과 리턴 최대 결정 그 일부 포인터를 정의하지 않고 명백히 코드를 작성 행렬의 변수를 모든 함수에서 전역 및 공유 가능하게 만들려면 코드가 간단하게 작동하지 않았을 것입니다. 그러나 효과가있었습니다. 전 세계적인 방법으로 행렬을 정의하지 않았기 때문에 효과가 없을 것이라고 생각했지만 기능에서는 으로 정의 된 다음 다른 기능으로 전달하는 것처럼 가장합니다.

제 질문은 : 왜 효과가 있었습니까?

코드 :

int matrix_definition(int a[][], int dim); 
int matrix_print(int a[][], int dim); 
int max_matrix(int a[][],int dim); 

int main() 
{ 
    int a[][], dim; 

    matrix_definition(a,dim); 
    matrix_print(a,dim); 

    printf("%d", max_matrix(a,dim)); 
    return 0; 
} 

주()와 matrix_definition을 포함한 전체 코드는 이것이다 : 당신이 게시

#include<stdio.h> 

#define SIZE 100 


    int matrix_definition(int a[SIZE][SIZE], int dim); 
    int matrix_print(int a[SIZE][SIZE], int dim); 
    int max_matrix(int a[SIZE][SIZE],int dim); 

    int main() 
    { 
     int a[SIZE][SIZE], dim; 

     matrix_definition(a,dim); 
     matrix_print(a,dim); 

     printf("%d", max_matrix(a,dim)); 
     return 0; 
    } 

int matrix_definition(int a[SIZE][SIZE],int dim) 
{ 
int i,j; 
srand(time(NULL)); 

for(i=0;i<dim;i++) 
    { 
     for(j=0;j<dim;j++) 
      { 
       a[i][j]=rand()%2; 
      } 
    } 
return 1; 
    } 
+0

정의되지 않은 동작에 오신 것을 환영합니다. 컴퓨터를 크래킹하지 않고 정의되지 않은 메모리 영역에 쓸 수 있다면 아마 다시 읽을 수 있습니다. –

+6

이 코드는 전혀 컴파일되어서는 안됩니다. – dbush

+0

'int main()'에서 전역 변수로 정의했습니다. 그렇지 않았습니다. –

답변

1

업데이트 된 코드는 원래 게시 된 것과 매우 다른 입니다. 예, 해당 코드는 a이 정의 된 방식과 다양한 기능에 전달되는 방식과 관련하여 유효합니다.

int (*a)[SIZE] 

이 정의 된 변수와 호환 :

매개 변수로 배열은 포인터로 변환되기 때문에
int a[SIZE][SIZE] 

이가 동일합니다 : 함수 선언의 각에서

당신은 매개 변수를 선언 in main :

int a[SIZE][SIZE]; 

배열을 함수로 옮기면 첫 번째 요소에 대한 포인터로 사라집니다. 그래서 함수 호출 :

matrix_definition(a,dim); 

은 동일하다 : int [SIZE] 입력있다

matrix_definition(&a[0],dim); 

발현 a[0] 그래서 식 &a[0]int (*)[SIZE] 입력 갖는다. 함수의 매개 변수와 같습니다.