26. 배열과 포인터(2)
27. 배열과 포인터(3)
28. 배열과 포인터(4)
29. 2차원 배열과 포인터(1)
30. 2차원 배열과 포인터(2)
26. 배열과 포인터(2)
ㅁ 배열과 포인터의 관계 (포인터도 배열처럼 사용할 수 있다!)
- int a[5];
int *b=a;
a[2] = 10; b[2] = 20;
a[0] a[1] a[2] a[3] a[4]
10이 대입됐다가
20이 대입됨. (같은 주소값을 가지고 있으므로)
a는 100번지임. 그래서
b <- 100번지가 들어감
ㅁ 문제
a[0] a[1] a[2] a[3]
1 2 4 8
3이 됨 (a랑 p는 똑같은 주소값을 가지고 있기에)
4
5
출력결과. 8, 10
변형문제. int *p= a+1;이었다면?
p의 100번지가 a의 101번지가됨. (이렇게 생각하면 안되고 p는 101번지를 가지고 있음)
p[0] = a[1]
a[0] a[1] a[2] a[3]
1 2 4 8
3
4
5
답은 4+3, 3+5니까 7, 8
27. 배열과 포인터(3)
ㅁ 문제
a[0] a[1] a[2] a[3]
10 20 30
p++되면 p의 주소값이 1증가. 그럼 p[0]은 a[1]. p는 101번지가됨.
p에는 지금 100이 있음. 근데 p++되면 값이 101이 됨.
*p++ = 100; <- p++의 실제값이 100이다. 근데 후위연산자이므로, p의 값(p가 가리키고 있는 101번지의 실제값에 100을 넣어라. 그러고나서 p++를 한다. 그럼 p는 102번지가됨.
a[1] = 100이 들어감.
*++p = 200; <- 103번지에 200이라는 값을 넣어라. 그럼 a[3]=200.
출력결과. a[0]=10, a[1]=100, a[2]=30
배열과 포인터변수를 그려라.
28. 배열과 포인터(4)
ㅁ a[3]이라는 배열이 있을 때, a라는 값이 가지고 있는 것은 첫번째(a[0])의 주소값을 가지고 있다.
ㅁ 문제
num[0] num[1] num[2] num[3]
1 2 3 4
pt++; <- pt는 101번지가 됨.
*pt++ = 5; <- 101번지의 실제값이 5가 됨. num[1]=5, 그리고 pt는 102번지가 됨.
*pt++ = 10; <- 102번지의 실제값이 10이됨. num[2]=10, 그리고 pt는 103번지가 됨.
pt --; <- pt는 102번지가 됨.
*pt++ += 20; <- 102번지의 실제값이 10 + 20이 됨. num[2]=30, 그리고 pt는 103번지가 됨.
출력결과. 1, 5, 30, 4
29. 2차원 배열과 포인터(1)
ㅁ 2차원 배열
- 각각의 행을 대표하는게 있음. a의 0번지 행을 대표, a의 1번지 행을 대표, a의 2번지 행을 대표.
- 첫 시작 주소, 1이 저장되어 있는 주소를 100이라고 했을 때, 배열은 물리적으로 연속된 공간이므로,
100번지 101번지
102번지 103번지
104번지 105번지
- 그리고 각각의 대표행이 가지고 있는 것은 그 첫번째 주소값, 100번지 102번지 104번지다.
(각각을 대표하는 행주소가 있음)
- 그리고 이 전체 배열을 대표하는 a라는 것은 a[0]이 가지고 있는 100이라는 주소를 가지게 된다.
- a를 출력. a에 있는 값, 100번지. 100
- *a를 출력. a의 실제값. a는 1을 가리키는게 아니라 a[0]을 가리키고 있다. 100
- **a를 출력. a의 실제값의 실제값. 1
ㅁ 문제
int data[ ][3] <- 행값은 없고 열값은 3개다. 이 말은 3개씩 끊겠다는 소리. (= 한 행에 3개씩만 들어간다)
1, 3, 4 5, 2, 9 6, 8, 7 <- 이게 아님. 그냥 3행 3열이라는 듯?
data[1] 1 3 4
data[2] 5 2 9 <- 0부터 시작.
data[3] 6 8 7
data[0] 100 1 3 4
data는 100 data[1] 103 5 2 9 <- data의 0번지는 첫번째인 100번지를 가진다.
data[2] 106 6 8 7
int *p = data[1]; <- 포인터 변수 p의 주소값이, data 1번지다. p는 103번지.
( 여기서 data[1]도 배열, 포인터처럼 그냥 쓰면 주소값 )
x = *p <- p가 가리키고 있는건 103번지다. 103번지의 실제 값은 5
답. x = 5, y = 9
30. 2차원 배열과 포인터(2)
ㅁ 문제
darr[0] 100 1 2 3
darr = 100 darr[1] 103 4 5 6
darr[2] 106 7 8 9
*(*darr+1) <- *(darr+1)이아니라 *darr+1이므로 *(100+1)은 2
*(*darr+2) <- 이건 3
*darr[1] = 4
*darr[2] = 7
답은 5, 11
'깨알 c언어' 카테고리의 다른 글
깨알 c언어 ch.36 ~ 40 (0) | 2024.03.09 |
---|---|
깨알 c언어 ch.31 ~ 35 (0) | 2024.03.08 |
깨알 c언어 ch.21 ~ 25 (0) | 2024.02.22 |
깨알 c언어 ch.16 ~ 20 (0) | 2024.02.22 |
깨알 c언어 ch.11 ~ 15 (0) | 2024.02.22 |