본문 바로가기
언어/C

2차원 배열과 포인터

by 새벽물망초 2022. 10. 13.

01

⭐개념

int a[3][2] = { {1,2}, {3,4}, {5,6} } // {1,2,3,4,5,6} 과 같음 보기 편하라고 이렇게 들 씀..

a[0][0] 1
주소:100
a[0][1] 2
주소:101
a[1][0] 3
주소:102
a[1][1] 4
주소:103
a[2][0] 5
주소:104
a[2][1] 6
주소:105

배열 a의 주소값 : 100 (맨 처음 a[0][0] 따라감)

 

printf("%d", a) 포인터변수 그냥 출력하라하면 주소값 뿌림(가진게 주소값) 따라서, 100 출력

printf("%d", *a) 포인터변수 주소에 있는 값을 출력, 1 (x) 아니다,,저렇게 생각하면 안됨

*a 라고 같은 주소에 있는 a[0][0]의 값 출력하는게 아니라, a[0]을 가르키고 있기 때문에

 a[0]과 가장 가까운 100출력 (o)

printf("%d", **a) a의 값의 값을 찾아라, a의 주소가 가리키는 값은 a[0]의 100, 

a[0]의 주소가 가리키는 값은 a[0][0]의 1, 따라서 1출력

 

 

#include <stdio.h>
int main() {
	int data[][3] = {1,3,4,5,2,9,6,8,7};
    int *p = data[1];
    int x,y;
    x = *p;
    y = *(p+2);
    printf("x=%d, y=%d\n", x, y);
}

data[][3] 배열 // [][3]과 같이 행을 생략하면 3열로 만들고, 3개씩 나눠서 채우면 됨

data[0][0] 1
100
data[0][1] 3
101
data[0][2] 4
102
[1][0] 5
103
[1][1] 2
104
[1][2] 9
105
[2][0] 6
106
[2][1] 8
107
[2][2] 7
108

포인터 p 에는 data[1]의 주소값 저장(103)

x = p의 데이터값, 현재 포인터 p의 주소는 103이기 때문에, 103주소의 데이터 값을 출력하면 5

y = p+2의 데이터값, 포인터 p의 주소는 103이기 때문에, 103+2 = 105, 105주소의 데이터값 출력하면 9

정답 : x=5, y=9

 

 

 

02

#include <stdio.h>
int main() {
	int darr[3][3]={{1,2,3}, {4,5,6}, {7,8,9}};
    int sum1, sum2;
    sum1 = *(*darr+1) + *(*darr+2);
    sum2 = *darr[1] + *darr[2];
    printf("%d, %d", sum1, sum2);
}
darr[0][0] 1
100
[0][1] 2
101
[0][2] 3
102
10 4
103
11 5
104
12 6
105
20 7
106
21 8
107
22 9
108

sum1에서 (*darr+1)에서 *darr는 해당 주소의 값을 가져와라

->*darr이므로 darr[0]의 값 100, 100+1=101

*(101주소) 는 101주소에 있는 값 출력 해라

-> 2 출력

(*darr+2) = 100+2 = 102, *(102주소) = 3 -> 3출력

sum1 = 2+3 = 5

 

sum2에서 *darr[1]은 darr[1]의 값 출력이다->103주소의 값 4 출력

*darr[2] -> 106주소의 값 7 출력

sum2 = 4+7 = 11

 

정답: 5 11

'언어 > C' 카테고리의 다른 글

배열과 포인터 핵심정리  (0) 2022.10.14
포인터 배열  (0) 2022.10.13
[c언어] 배열과 포인터  (0) 2022.10.13
[C언어] 비트연산자  (0) 2022.07.21
[C언어] 사용자 정의 함수  (0) 2022.07.11

댓글