포인터에 대해 전혀 이해 못한 것이 아님에도 불구하고 문제로만 풀면 꼭 틀린다...완전히 이해 못했기 때문이겠지ㅠㅠ
다시 한번 마음을 가다듬고 도저어언💪
1차원 배열에서 배열명은 주소값을 나타낸다.
int a[2] = {1, 2};
int *p;
p = a; 와 같이 사용 할 수 있다.
또한 배열의 값에 접근하기 위해서 a[0]과 같이 사용하고 이 값의 주소값을 구하기 위해 '&'를 붙여준다. 즉 p = &a[0]; 와 같이 사용 할 수 있다는 것!
마찬가지로 2차원 배열에서는 1차원 배열의 a[0]값이 곧 주소값이 된다.
그리고 배열의 값에 접근하기 위해서는 a[0][0]와 같이 사용하고, 역시 마찬가지로 p = &a[0][0]; 을 사용 할 수 있다.
문제를 예로 들어보자.
#include <stdio.h>
void main() {
int a[2][2] = {{10,20},{30,40}};
int i;
int *p;
p = a[0];
for(i=0; i<2; i++){
printf("%d ", *(p+i));
}
}
풀이
p = a[0]은 결국 {10,20}의 주소값을 의미하고 반복문 안에서 i가 0일 때는 *p 값인 10을, i가 1일 때는 *(p+1) 값인 20을 출력하기 때문에 결과는 10 20이 될 것이다.