6주차(2/5~2/12)
진도 : chapter 09
기본 미션 : 포인터의 핵심 내용을 정리하고 공유하기
(아래에 정리했습니당)
선택 미션 : Ch.09 도전 실전 예제(p.261) 풀고 인증하기
도전 실전 예제) 미니 정렬 프로그램
문제 : 키보드로 실수 3개를 입력한 다음 큰 숫자부터 작은 숫자로 정렬한 뒤 출력하는 프로그램을 작성합니다. 다음 코드와 출력 결과를 참고하여 line_up 함수를 작성하세요. line_up 함수에는 이미 정의된 swap 함수를 호출하여 구현하세요.
메모리의 주소
메모리는 데이터를 넣고 꺼내쓰는공간으로 그 위치를 식별 가능해야함
프로그램이 사용하는 메모리의 위치를 주소 값으로 식별 가능
메모리의 위치를 식별하는 주소 값은 바이트 단위로 구분
주소 연산자 : &
주소 : 변수가 할당된 메모리 공간을 시작 주소
주소 연산자 &를 사용하면 변수가 할당된 메모리 공간의 시작 주소 값을 알 수 있음
포인터와 간접 참조 연산자 : *
포인터는 메모리 주소를 저장하는 변수로 일반 변수와 마찬가지로 선언 후에 사용함
형태 : 자료형 *변수형;
포인터의 자료형은 저장할 주소가 어떤 변수의 주소인지 그 변수의 자료형을 적음
포인터가 주소를 저장하면 ‘가리킨다’고 말하고 화살표를 그려 간단히 표현함
pa → a
(포인터 pa는 변수 a를 가리킨다.)
간접 참조 연산자(*) : 포인터가 가리키는 변수를 사용할 때는 포인터에 사용하는 연산자
포인터가 가리키는 변수 : *pa
포인터가 가리키는 변수를 사용할 때는 간접 참조 연산자(*)를 사용함
&a로 변수 a의 저장 공간 찾기 : scanf(”%d”, &a);
pa로 변수 a의 저장 공간 찾기 : scanf(”%d”, pa); // 포인터 pa, 값은 &a
여러가지 포인터 사용해보기
int *pa, *pb;
→ 포인터 동시 선언
int *pt;
→ 포인터 선언
pt = &total;
→ 주소를 구해 저장
int *pt = &total;
→ 포인터 선언과 동시에 주소로 초기화
double *pg = &avg;
→ avg가 double형 변수이므로 pg 앞에 double을 붙임
const를 사용한 포인터
const 예약어를 포인터에 사용하면 이는 가리키는 변수의 값을 바꿀 수 없다는 의미임
포인터에 const를 사용하는 이유 : 문자열 상수는 값이 바뀌면 안 되는 저장 공간이므로 함수의 매개변수를 통해서 값을 바꿀 수 없도록 매개 변수로 선언된 포인터에 const를 사용함
주소와 포인터의 차이
주소는 ‘상수’이고, 포인터는 ‘변수’임
두 포인터가 같은 주소를 저장하는 일, 하나의 변수를 동시에 가리키는 일도 가능
주소와 포인터의 크기
모든 주소와 포인터는 가리키는 자료형에 관계없이 크기가 같음
포인터의 대입 규칙
포인터를 사용하는 이유
포인터를 사용하려면 추가적인 변수 선언이 피룡하고 주소 연산, 간접 참조 연산 등 각종 연산을 수행해야 함.
하지만 임베디드 프로그래밍을 할 때 메모리에 직접 접근하는 경우나 동적 할당한 메모리를 사용하는 경우에는 포인터가 반드시 필요함.
*임베디드 프로그래밍이란? : 임베디드 시스템(내장형 시스템)을 제어하기 위한 프로그램으로, 하드웨어를 제어하는 소프트웨어를 만드는 일을 임베디드 프로그래밍이라고 함.