a[4]={10,20,30}
int*p=a
[0] | [1] | [2] | [3] |
10 | 20 | 30 | |
100 | 200 | ||
100번지 | 101번지 | 102번지 | 103번지 |
p | p++ |
p++ //100번지에서 1더해서 102번지. 단독으로 있는 경우에는 후치연산자 적용하지 않음.
*p++=100 //*p++ 해석=101번지의 값. 그리고 나서 ++해주기(102번지.)
*++p=200 //*++p 해석=102번지에 1더해서 103번지. 103번지의 값.
배열과 포인터 4
num[4]={1,2,3,4}
[0] | [1] | [2] | [3] |
1 | 2 | 3 | 4 |
5 | 10 | ||
30 | |||
100번지 | 101번지 | 102번지 | 103번지 |
*pt=num
pt++ //100번지+1=101번지
*pt++=5 //*pt=5, pt++ 순으로 진행함. pt 주소는 현재 102번지
*pt++=10 // *pt=5, pt++ 순으로 진행함. pt 주소는 현재 103번지
pt-- //102번지
*pt+++=20 //*pt+=20, pt++ 순으로 진행함. pt 주소는 현재 103번지
2차원 배열과 포인터 1
메인함수
data[ ][3]={1,3,4,5,2,9,6,8,7}
*p=data[1]
x,y
[0] | [1] | [2] | |
[0] | 1 | 3 | 4 |
[1] | 5 | 2 | 9 |
[2] | 6 | 8 | 7 |
5 | 2 | 9 |
p | p+1 | p+2 |
x=*p //p의 값. 5.
y=*(p+2) //9.
x=%d, y=%d\n, x,y
정답:
x=5, y=9
2차원 배열과 포인터 2
메인함수
darr[3][3]={{1,2,3},{4,5,6,},{7,8,9}}
sum1,sum2
[0] 100번지 |
[1] 101번지 |
[2] 102번지 |
||
darr | [0] 100번지 |
1 | 2 | 3 |
103번지 | 104번지 | 105번지 | ||
[1] 103번지 |
4 | 5 | 6 | |
106번지 | 107번지 | 108번지 | ||
[2] 106번지 |
7 | 8 | 9 |
sum1=*(*darr+1)+*(*darr+2) //darr의 값은 100번지이다. 100+1=101번지의 값은 2. //100+2=102번지의 값은 3 //2+3=5
sum2=*darr[1]+*darr[2] // darr[1]의 값은 103번지이다. 4. // darr[2]의 값은 106번지이다. 7 //4+7=11
%d,%d, sum1, sum2
정답:
5,11
<<틀리기 쉬운 문제>>
31강 포인터 배열
메인함수
static char *c[]={"aaa", "bbb", "ccc"}
20번지 | a | a | a |
30번지 | b | b | b |
40번지 | c | c | c |
100번지 | 101번지 | 102번지 |
20번지 | 30번지 | 40번지 |
print("%s" *(c+1)) //100번지+1=101번지. %s는 주소값을 받는다.(*(c+1)=101번지의 값인 30번지) //30번지에 있는 문자를 다 출력. bbb
정답:
bbb
32강 포인터 배열2
메인함수
char*array[2]={"Good morning", "C language"}
100번지 | 101번지 |
20번지 | 30번지 |
array[0] | 20번지 | Good morning |
array[1] | 30번지 | C language |
20번지 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | ||
G | o | o | d | m | o | r | n | i | n | g | |
30번지 | 31 | 32 | 33 | 34 | 35 | 36 | |||||
C | l | a | n | g | u | a | g | e |
printf("%s\n", array[0]+5) //25번지 값부터 끝까지 다 출력. //morning
printf("%c\n", *(array[1]+6)) //u
정답:
morning
u
<<틀리기 쉬운 문제>>
33강 포인터배열 3
100번지 | 101번지 | 102번지 | |
a[0] | -3 | 14 | 5 |
103번지 | 104번지 | 105번지 | |
a[1] | 1 | -10 | 8 |
*b[]={a[0],a[1]}
100번지 | 103번지 |
*p=b[1]
103번지 |
*b[1]=1 //103번지의 값. 1
*(++p)=-10 //104번지의 값. -10
*(--p-2)= //103번지-2=101번지의 값. 14
34강 포인터 배열 4
메인함수
*arr[3]
a=12, b=24, c=36
arr[0] 100번지 |
&a |
[1] | &b |
[2] | &c |
arr[0]=&a
arr[1]=&b
arr[2]=&c
*arr[1]=24
**arr=12 //이중 포인터.
<<틀리기 쉬운 문제>>
35강 구조체, 포인터 이동
struct 구조체명
메인함수
struct 리스트{
int *fp
}데이터, *p
int x[]={100,200,300,400}
p=&데이터
p->fp=x+1 //200번지+1=201번지.
200번지 | 201번지 | 202번지 | |
100 | 200 | 300 | 400 |
*(++p->fp)=300 //++p가 우선이 아님! 구조체의 경우, p->fp 먼저 하고 ++해줘야함. 201번지+1=202번지
<<틀리기 쉬운 문제>>
36강 배열 포인터
int(*in)[4] //4개씩 자르는 배열 포인터.
int num[3][3]={1,2,3,4,5,6,7,8,9}
in=num //num 배열을 in 배열 포인터에 넣음.
num | ||
100번지 | ||
1 | 2 | 3 |
4 | 5 | 6 |
7 | 8 | 9 |
in | |||
100번지 | 101번지 | ||
1 | 2 | 3 | 4 |
5 | 6 | 7 | 8 |
9 |
**in=1
*(*in+1)=2 //옆으로 감.
**(in+1)=5 //아래로 내려감. 104번지의 값. 5
<<틀리기 쉬운 문제>>
#define N 3 //N은 전부 3으로 대체하겠다.
메인함수
int(*in)[N], *out, sum=0 //3개씩 자르는 포인터배열 in.
in=(int(*)[N]) malloc(N*N*sizeof(int)) //멀록 함수. 동적으로 메모리에 할당하는 함수. //sizeof(int)는 int가 4바이트니까 4. // N*N*sizeof(int) 이건.. 3행 3열짜리 9개 int형태의 배열을 만들겠다는 소리임.
out=(int*) in
out | ||
in | ||
100번지 | ||
0 | 1 | 2 |
3 | 4 | 5 |
6 | 7 | 8 |
for문 i=0; i<N*N; i++
out[i]=i
for문 i=0; i<N; i++
sum=sum+in[i][i]
sum은 얼마냐... //0+0+4+8=12.
'정보처리기사 필답 실기. 코딩 문제.' 카테고리의 다른 글
흥달쌤 49. 스테틱 변수 1 (0) | 2025.05.28 |
---|---|
흥달쌤 39. 함수에 주소전달 1 (0) | 2025.05.28 |
흥달쌤 24. scanf와 포인터 변수 (0) | 2025.05.24 |
흥달쌤 7. 관계, 논리연산자 (0) | 2025.05.24 |
흥달쌤. 연산자 우선순위 (0) | 2025.05.23 |
댓글