본문 바로가기
정보처리기사 필답 실기. 코딩 문제.

흥달쌤 27. 배열과 포인터 3

by 귀엽소 2025. 5. 26.
반응형

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.


 

반응형

댓글