별표 하나는 대괄호 하나에 해당한다.
2차원 배열을 포인터로 접근했을 때 별(*)표 하나는 행을 대상체로 하므로 배열 요소 자체의 값을 구할 수 없다.
포인터 변수 더하기 정수는 행 단위로 움직인다.
*imsip, *imsip + 0 은 차이가 없다.
*( imsip + 숫자 ) 는 imsip + 숫자와 같고 이는 행 단위로 움직인다.
*imsip + 숫자는 배열 요소의 증가를 뜻하므로 4바이트씩 증가한다.
int ( *imsip )[ 2 ] vs int *temp[ 2 ]
temp 라는 것은 포인터를 저장할 수 있는 영역이 두 개인 것이다. (temp[ 0 ], temp[ 1 ])
그리고 temp 자체는 배열명이 된다.
2차원 배열을 포인터로 접근했을 때 별(*)표 하나는 행을 대상체로 하므로 배열 요소 자체의 값을 구할 수 없다.
포인터 변수 더하기 정수는 행 단위로 움직인다.
/* *( imsip + 1 ) 과 *imsip + 1의 차이 */
#include <stdio.h>
main() {
int imsi[ 2 ][ 3 ] = { { 3, 5 }, { 12, 54 }, { 534, 923 } };
int ( *imsip )[ 2 ];
imsip = imsi;
printf( "%#010x %#010x\n", *imsip, *imsip + 0 );
printf( "%#010x %#010x\n", *( imsip + 1 ), *imsip + 1 );
printf( "%#010x %#010x\n", *( imsip + 2 ), *imsip + 2 );
}
#include <stdio.h>
main() {
int imsi[ 2 ][ 3 ] = { { 3, 5 }, { 12, 54 }, { 534, 923 } };
int ( *imsip )[ 2 ];
imsip = imsi;
printf( "%#010x %#010x\n", *imsip, *imsip + 0 );
printf( "%#010x %#010x\n", *( imsip + 1 ), *imsip + 1 );
printf( "%#010x %#010x\n", *( imsip + 2 ), *imsip + 2 );
}
// output
0x8047d10 0x8047d10
0x8047d18 0x8047d14
0x8047d20 0x8047d18
0x8047d10 0x8047d10
0x8047d18 0x8047d14
0x8047d20 0x8047d18
*imsip, *imsip + 0 은 차이가 없다.
*( imsip + 숫자 ) 는 imsip + 숫자와 같고 이는 행 단위로 움직인다.
*imsip + 숫자는 배열 요소의 증가를 뜻하므로 4바이트씩 증가한다.
int imsi[ 2 ][ 3 ] = { { 3, 5 }, { 12, 54 }, { 534, 923 } };
int ( *imsip )[ 2 ];
imsip = imsi;
// 다음 포인터 변수를 사용하여 출력
printf( "%d\n", *( *( imsip + 0 ) + 0 ) ); // 3
printf( "%d\n", *( *( imsip + 0 ) + 1 ) ); // 5
printf( "%d\n", *( *( imsip + 1 ) + 0 ) ); // 12
printf( "%d\n", *( *( imsip + 1 ) + 1 ) ); // 54
printf( "%d\n", *( *( imsip + 2 ) + 0 ) ); // 534
printf( "%d\n", *( *( imsip + 2 ) + 1 ) ); // 923
// 가장 안쪽의 괄호 안의 수치는 행, 바깥쪽은 행의 배열 요소와 관련
// 다음과 같이 변경 가능
printf( "%d\n", *( imsip[ 0 ] + 0 ) ); // 3
printf( "%d\n", *( imsip[ 0 ] + 1 ) ); // 5
printf( "%d\n", *( imsip[ 1 ] + 0 ) ); // 12
printf( "%d\n", *( imsip[ 1 ] + 1 ) ); // 54
printf( "%d\n", *( imsip[ 2 ] + 0 ) ); // 534
printf( "%d\n", *( imsip[ 2 ] + 1 ) ); // 923
// for문 사용
for ( i = 0; i < 3; i++ ) // 행의 길이
for ( j = 0; j < 2; j++ ) { // 열의 길이
printf( "%d\n", *( imsip[ i ] + j ) );
}
}
int ( *imsip )[ 2 ];
imsip = imsi;
// 다음 포인터 변수를 사용하여 출력
printf( "%d\n", *( *( imsip + 0 ) + 0 ) ); // 3
printf( "%d\n", *( *( imsip + 0 ) + 1 ) ); // 5
printf( "%d\n", *( *( imsip + 1 ) + 0 ) ); // 12
printf( "%d\n", *( *( imsip + 1 ) + 1 ) ); // 54
printf( "%d\n", *( *( imsip + 2 ) + 0 ) ); // 534
printf( "%d\n", *( *( imsip + 2 ) + 1 ) ); // 923
// 가장 안쪽의 괄호 안의 수치는 행, 바깥쪽은 행의 배열 요소와 관련
// 다음과 같이 변경 가능
printf( "%d\n", *( imsip[ 0 ] + 0 ) ); // 3
printf( "%d\n", *( imsip[ 0 ] + 1 ) ); // 5
printf( "%d\n", *( imsip[ 1 ] + 0 ) ); // 12
printf( "%d\n", *( imsip[ 1 ] + 1 ) ); // 54
printf( "%d\n", *( imsip[ 2 ] + 0 ) ); // 534
printf( "%d\n", *( imsip[ 2 ] + 1 ) ); // 923
// for문 사용
for ( i = 0; i < 3; i++ ) // 행의 길이
for ( j = 0; j < 2; j++ ) { // 열의 길이
printf( "%d\n", *( imsip[ i ] + j ) );
}
}
int ( *imsip )[ 2 ] vs int *temp[ 2 ]
#include <stdio.h>
main() {
int ( *imsip )[ 2 ];
int *temp[ 2 ];
printf( "&imsip %#010x\n", &imsip );
printf( "&temp[ 0 ] %#010x\n", &temp[ 0 ] );
printf( "&temp[ 1 ] %#010x\n", &temp[ 1 ] );
}
main() {
int ( *imsip )[ 2 ];
int *temp[ 2 ];
printf( "&imsip %#010x\n", &imsip );
printf( "&temp[ 0 ] %#010x\n", &temp[ 0 ] );
printf( "&temp[ 1 ] %#010x\n", &temp[ 1 ] );
}
// output
&imsip 0x8047d24
&temp[ 0 ] 0x8047d18
&temp[ 1 ] 0x8047d1c
&imsip 0x8047d24
&temp[ 0 ] 0x8047d18
&temp[ 1 ] 0x8047d1c
temp 라는 것은 포인터를 저장할 수 있는 영역이 두 개인 것이다. (temp[ 0 ], temp[ 1 ])
그리고 temp 자체는 배열명이 된다.
WRITTEN BY
- 손가락귀신
정신 못차리면, 벌 받는다.
,