배열 a의 첫 번째 요소 주소로 배열 q [] [4]를 초기화 할 때 다음 코드가 작동하지 않는 것이 테스트되고 분명합니다.
int main()
{
int a[3][4] =
{
1, 2, 3, 4,
5, 6, 7, 8,
9, 0, 1, 6
} ;
int q[ ][4]=a;
int i,j;
for(i=0; i<3; i++)
{
for(j=0;j<4;j++)
{
printf("%d",q[i][j]);
}
}
return 0;
}
그러나 함수를 사용하여 동일한 논리를 구현하면 (즉, 배열 a의 주소를 함수의 형식 매개 변수 q [] [4]에 전달) 제대로 작동합니다.
main( )
{
int a[3][4] =
{
1, 2, 3, 4,
5, 6, 7, 8,
9, 0, 1, 6
} ;
print ( a, 3, 4 ) ;
}
print ( int q[ ][4], int row, int col )
{
int i, j ;
for ( i = 0 ; i < row ; i++ )
{
for ( j = 0 ; j < col ; j++ )
printf ( "%d ", q[i][j] ) ;
printf ( "\n" ) ;
}
printf ( "\n" ) ;
}
어떻게 가능합니까?
int q[ ][4]
in 함수 인수는 int (*q)[4]
(의 4 요소 배열에 대한 포인터 )와 동일합니다 int
. N1570 6.7.6.3 함수 선언자 (프로토 타입 포함), 단락 7은 다음과 같이 말합니다.
매개 변수의``형 배열 ''선언은``형식에 대한 정규화 된 포인터 ''로 조정되어야합니다. 여기서 유형 한정자는 (있는 경우) 배열 유형 파생의 [및] 내에 지정된 것입니다.
또한 a
함수 인수에 사용되는 경우 배열의 첫 번째 요소를 가리키는 포인터로 변환됩니다 int
. N1570 6.3.2.1 L 값, 배열 및 함수 지정자. 단락 3은 말한다 :
sizeof 연산자, _Alignof 연산자 또는 단항 & 연산자의 피연산자이거나 배열을 초기화하는 데 사용되는 문자열 리터럴 인 경우를 제외하고 ''array of type ''유형이있는 표현식은 다음과 같은 표현식으로 변환됩니다. 배열 객체의 초기 요소를 가리키고 lvalue가 아닌 ''형식에 대한 포인터 ''를 입력합니다.
따라서 함수 print()
는 배열의 요소가 어디에 있는지 알고 작업 할 수 있습니다.
그건 그렇고, 함수 를 사용하는 줄 앞에 함수 (또는 함수가 선언 된 헤더 포함)를 선언하는 것을 잊지 마십시오 .
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다