2013-03-16 5 views
0

문제점이 있습니다. []를 사용하지 않고 행렬을 바꾸는 프로그램을 작성하라는 요청을 받았습니다. 예를 들어, 배열이 1 차원 배열이라면 배열 [3]은 * (배열 + 3)과 같을 수 있습니다.) ...하지만 매트릭스로 어떻게 할 수 있습니까?[] C 언어를 사용하지 않고 값을 매트릭스로 스캔

여기 스캔 내 코드입니다 : mat1 간단한 포인터가

void scan_matrix(matrix mat1,int number_of_rows, int number_of_columns) 
{ 
    int row_index,column_index; 
    for(row_index=0;row_index<number_of_rows;row_index++) 
    { 
     printf("Enter the values of row %d\n",row_index); 
     for(column_index=0;column_index<number_of_columns;column_index++) 
      scanf("%d",WHAT GOES HERE?????); 
    } 
} 
+5

'매트릭스'가 무엇인지에 따라 달라집니다. –

+0

2 차원 배열입니다. 행과 열이 있습니다. 나는 이것에 관해서 새롭다. 질문이 불분명하다면 미안하다. –

+1

@OriaGruber []를 사용하지 않으려는 경우 * 산술 연산을 사용해야합니다. –

답변

1

경우,이 당신을 위해 작업을 수행해야합니다

for(row_index=0;row_index<number_of_rows;row_index++) 
    { 
     printf("Enter the values of row %d\n",row_index); 
     for(column_index=0;column_index<number_of_columns;column_index++) 
      scanf("%d", (mat1 + row_index*number_of_columns + column_index)); 
    } 

이 프로그램은 사실을 사용하는 매트릭스 (2 d 배열)은 실제로 메모리에 1 차원 배열로 저장됩니다.

는 2 차원 매트릭스를 가지고 가게 :

1 2 3 
4 5 6 

이 같은 메모리에 저장된다

1 2 3 4 5 6 

따라서 올바른 변수 어레이 요소들의 논리적 위치를 매핑하는 방법을 사용하여 액세스 실제 위치와 함께. 매트 [3] [3]

다음 scanf와 코드는 다음과 같습니다 : 매트 같은 두 가지 차원 INT 배열 인 경우

Pos = Row*Num_Of_Col + Col 
1

: 우리가 필요로하는 모든 것을 끈다 관계를 발견하는 것입니다 scanf("%d",(*(mat+row_index)+column_index));

a[3] : *(a+3) 
a[3][3] : (*(a+3)+3) 
관련 문제