일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- 레지스터
- 컴퓨터
- 출력
- 처리
- 소프트웨어
- 운영체제 목적
- 반복 구조 찾기
- 공부정리
- 운영체제의 발달 과정
- 운영체제의 미래
- 미래 사회의 단위
- 뿌..
- 앨런 튜링
- 운영체제 서비스
- 순서도
- 해결 방안
- 국립과천과학관
- 말 인용
- gensim 3.7.3 설치 오류
- 기계어
- 장치에 할당할 수 없는 NET ID Broadcast주소
- 절차적 사고의 장점
- 선택
- 패킷트레이서 이용
- 운영체제의 기능 1. 자원 관리 기능 2. 시스템 보호 3. 네트워크(통신 기능)
- 딥러닝
- 겁나 많아
- 절차적 사고
- 프로그래밍
- 소프트웨어 시대
- Today
- Total
hye-_
27강 배열과 포인터(3) 본문
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
'언어 > 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 |