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 |
댓글