배열 포인터 정의
*imsip 가 가리키는 대상체는 imsi[ 0 ][ 0 ] 하나가 아니라
imsi[ 0 ][ 0 ], imsi[ 0 ][ 1 ], imsi[ 0 ][ 2 ]이다.
( *imsip )[ 3 ] 에서 첨자에 사용된 3이라는 수치가 이를 나타내고 있다.
2차원 배열 포인터 변수의 배열 첨자는 열의 개수이다.
imsi, imsi[ 0 ], &imsi[ 0 ][ 0 ] 는 확실히 같은 번지를 가리킨다.
하지만 가리키는 대상체의 크기가 다르다는 것을 위 예문에서 보여준다.
imsi 는 배열 전체를 가리키고 있다. ( 24 byte가 증명 )
imsi[ 0 ] 는 행을 대표하고 있다. ( 8 byte가 증명 )
&imsi[ 0 ][ 0 ] 는 하나의 배열 요소를 가리키고 있다.
imsip 는 imsi 배열의 첫번째 요소를 가리킨다.
5, 3, 7 전부를 가리키는게 아니라 5만 가리킨다.
2차원 포인트 변수인 imsip2 는 2차원 배열이기 때문에 요소의 행을 가리킨다.
imsip 가 가리키는 대상은 4바이트고 imsip2 는 8 바이트이다.
int *imsip; // 1차원 배열 포인터
int (*imsip2)[ 3 ]; // 2차원 배열 포인터
int (*imsip3)[ 2 ][ 3 ]; // 3차원 배열 포인터
int (*imsip2)[ 3 ]; // 2차원 배열 포인터
int (*imsip3)[ 2 ][ 3 ]; // 3차원 배열 포인터
/* 1차원 배열의 sizeof */
#include <stdio.h>
main() {
int imsi[ 2 ];
int *imsip;
printf( "%d\n", sizeof( imsi ) ); // 8
printf( "%d\n", sizeof( imsip ) ); // 4
printf( "%d\n", sizeof( *imsip ) ); // 4
}
.#include <stdio.h>
main() {
int imsi[ 2 ];
int *imsip;
printf( "%d\n", sizeof( imsi ) ); // 8
printf( "%d\n", sizeof( imsip ) ); // 4
printf( "%d\n", sizeof( *imsip ) ); // 4
}
/* 2차원 배열의 sizeof */
#include <stdio.h>
main() {
int imsi[ 2 ][ 3 ];
int ( *imsip )[ 3 ];
printf( "%d\n", sizeof( imsi ) ); // 24
printf( "%d\n", sizeof( imsip ) ); // 4
printf( "%d\n", sizeof( *imsip ) ); // 12
}
#include <stdio.h>
main() {
int imsi[ 2 ][ 3 ];
int ( *imsip )[ 3 ];
printf( "%d\n", sizeof( imsi ) ); // 24
printf( "%d\n", sizeof( imsip ) ); // 4
printf( "%d\n", sizeof( *imsip ) ); // 12
}
*imsip 가 가리키는 대상체는 imsi[ 0 ][ 0 ] 하나가 아니라
imsi[ 0 ][ 0 ], imsi[ 0 ][ 1 ], imsi[ 0 ][ 2 ]이다.
( *imsip )[ 3 ] 에서 첨자에 사용된 3이라는 수치가 이를 나타내고 있다.
2차원 배열 포인터 변수의 배열 첨자는 열의 개수이다.
#include <stdio.h>
main() {
int imsi[ 2 ][ 3 ] = { { 3, 5 }, { 12, 54 }, { 534, 923 } };
printf( "%d byte\n", sizeof( imsi ) ); // 24
printf( "%d byte\n", sizeof( imsi[ 0 ] ) ); // 8
printf( "%d byte\n", sizeof( &imsi[ 0 ][ 0 ] ) ); // 4
}
main() {
int imsi[ 2 ][ 3 ] = { { 3, 5 }, { 12, 54 }, { 534, 923 } };
printf( "%d byte\n", sizeof( imsi ) ); // 24
printf( "%d byte\n", sizeof( imsi[ 0 ] ) ); // 8
printf( "%d byte\n", sizeof( &imsi[ 0 ][ 0 ] ) ); // 4
}
imsi, imsi[ 0 ], &imsi[ 0 ][ 0 ] 는 확실히 같은 번지를 가리킨다.
하지만 가리키는 대상체의 크기가 다르다는 것을 위 예문에서 보여준다.
imsi 는 배열 전체를 가리키고 있다. ( 24 byte가 증명 )
imsi[ 0 ] 는 행을 대표하고 있다. ( 8 byte가 증명 )
&imsi[ 0 ][ 0 ] 는 하나의 배열 요소를 가리키고 있다.
int imsi[ 3 ] = { 5, 3, 7 };
int *imsip = imsi;
int imsi2[ 3 ][ 2 ] = { 7, 3, 2, 5, 3, 8 };
int (*imsip2)[ 2 ];
int *imsip = imsi;
int imsi2[ 3 ][ 2 ] = { 7, 3, 2, 5, 3, 8 };
int (*imsip2)[ 2 ];
imsip 는 imsi 배열의 첫번째 요소를 가리킨다.
5, 3, 7 전부를 가리키는게 아니라 5만 가리킨다.
2차원 포인트 변수인 imsip2 는 2차원 배열이기 때문에 요소의 행을 가리킨다.
imsip 가 가리키는 대상은 4바이트고 imsip2 는 8 바이트이다.
WRITTEN BY
- 손가락귀신
정신 못차리면, 벌 받는다.
,