int a[4] ={1,2,3,4};
int *pt = &a[0] // 포인터가 배열의 첫번째 주소를 가르키도록 함

1. 개념문제
pt 는? - a[0]의 주소 0000
pt+1은? - a[1]의 주소 0004
a 는? - a[0]의 주소 0000
a+1 은? - a[1]의 주소 0004
&a[0] 은? a[0]의 주소 0000
pt[1] 은? - a[1]의 값 2
*pt 는? - a[0]의 값 1
*(pt+1) 는? a[1]의 값 2

2. 혼합문제
int a[4] = {1,2,3,4};
int *pt = &a[3];
pt의 값은? a[3]의 주소 0012
*pt의 값은? a[3]의 값 4
*(pt--)의 값은? a[2]의 값 3
(*pt)-3의 값은? a[3]의 값 4 - 3 = 1
pt[0]+1의 값은? a[3]의 값 4 +1 = 5
pt -3 의 값은? a[0]의 주소 0000 // 3을 뺏다고해서 3이 줄어들지않고 int형으로 3번 줄어들어 12바이트 줄어듬

문자열을 풀어보자

char a[5] = "abcd";
char *pt = &a[0];
// 문자열은 주소이면서 값을 나타낸다.

pt 는? - a[0]의 주소 abcd
pt+1은? - a[1]의 주소 bcd
a 는? - a[0]의 주소 abcd
a+1 은? - a[1]의 주소 bcd
&a[0] 은? a[0]의 주소 abcd
pt[1] 은? - a[1]의 값 b
*pt 는? - a[0]의 값 a
*(pt+1) 는? a[1]의 값 b
char a[5] = "abcd";
char *pt = &a[3];
pt의 값은? a[3]의 주소 d
*pt의 값은? a[3]의 값 d
*(pt--)의 값은? a[2]의 값 c
(*pt)-3의 값은? a[3]의 값 c - 3 = a // 아스키코드 c-3하면 a가 된다.
pt[0]+1의 값은? a[3]의 값 d + 1 = e // 아스키코드 d+1하면 e가 된다.
pt -3 의 값은? a[0]의 주소 abcd // 3을 뺏다고해서 3이 줄어들지않고 char형으로 3번 줄어들어 3바이트 줄어듬

'C' 카테고리의 다른 글

[C] 이중 포인터  (0) 2019.12.03
[C] const의 사용방법  (0) 2019.12.03
[C] int형 배열과 char형 배열의 선언  (0) 2019.12.03
[C] scanf의 입력의 끝은?  (0) 2019.12.03
[C] int형 char형 배열의 scanf printf  (0) 2019.12.03
블로그 이미지

ryancha9

https://blog.naver.com/7246lsy

,