관리 메뉴

hye-_

27강 배열과 포인터(3) 본문

언어/C언어_기초

27강 배열과 포인터(3)

hyehh 2023. 10. 18. 20:25
728x90
반응형
SMALL
728x90
반응형
SMALL

27강 | 배열과 포인터(3)

자료 출처 - (4) 깨알 C언어 | 27. 배열과 포인터 (3) - YouTube


[문제] 다음 C 프로그램의 실행 결과로 옳은 것은?

#include <stdio.h>
int main(void){
   int a[4] = {10, 20, 30};
   int *p = a;
   p++;
   *p++ = 100;
   *++p = 200;
   printf("a[0]=%d, a[1]=%d, a[2]=%d\n", a[0], a[1], a[2]);
}

a[0]=10, a[1]=100, a[2]=30 


풀이과정


int a[4] = {10, 20, 30};

int a에는 (0, 1, 2, 3) 4개의 공간을 만들어놨고, 그 안에는 10, 20, 30이 들어가 있다. 

 

첫 번째로 시작하는 주소가 100번지라고 가정했을 때

이 a라는 변수는 100번지를 가지고 있다. 


int *p = a;

포인터변수 p를 만들었고, a에 있는 값을 대입해라.

 

a라는 공간에는 100번지라는 주소값이 들어가져 있다.

포인터변수 p에는 메모리의 주소값이 들어갈 수 있기 때문에 10이 아닌 100번지라는 주소값이 들어가게 된다. 

그리고 똑같이 a[0]을 가리키고 있는 상태이다.  


p++;

p를 가지고 ++를 했다.

p에는 지금 100이 있는데 ++를 하니깐 값이 101이 된다.


*p++ = 100;

*p++

p++의 값이다.

 

++의 위치가 뒤에 있다.

1. p가 가리키고 있는 101의 공간의 값에다가 100을 집어넣어라.

    즉, a[1]의 공간에 있는 값 20을 100으로 바꿔준다. 

 

2. 그리고 나서 p++를 해라.  

    p는 102가 된다.


*++p = 200;

*++p

++p의 값이다.

 

++의 위치가 앞이다.

1. 먼저 p를 ++를 한다.

   p는 103이 된다.

 

2. 그러면 103번지의 값에 200을 대입해라.

    즉, a[3]의 공간에 200이 들어가게 된다.


printf("a[0]=%d, a[1]=%d, a[2]=%d\n", a[0], a[1], a[2]);

printf

출력을 하는데, f 폼형식에 맞게 출력된다.

하나씩 매칭해서 a[0], a[1], a[2]를 출력한다.(10, 100, 30)

 

a[0]=10, a[1]=100, a[2]=30 


 

728x90
반응형
LIST

'언어 > C언어_기초' 카테고리의 다른 글

29강 2차원 배열과 포인터  (0) 2023.10.18
28강 배열과 포인터(4)  (0) 2023.10.18
26강 배열과 포인터(2)  (1) 2023.10.18
25강 배열과 포인터 (1)  (0) 2023.08.25
18강 while, if문  (5) 2023.07.18