본문 바로가기

2023 혼공c

[혼공학습단 10기]활동 '혼자 공부하는 C언어' 6주차

안녕하세요 타이밍입니다.

남들 다하는 개정판 말고 1판으로 하는 C언어 공부!

어느덧 혼공학습단 10기의 마지막 미션을 하게 되었습니다. 이와 관련한 저의 소감은 다음 포스팅에서 길게 이야기 하도록 하겠습니다. 이제 입추가 지나고 슬슬 밤이 깊어지고 있으니 마지막 까지 화이팅 해 봅시다.

 

 

 

혼자 공부하는 C언어 1판

 

 

 

기본미션

포인터의 핵심 내용을 정리하고 공유하기

 

 

포인터

- 변수의 메모리 주소를 저장하는 변수

why? : 사용 범위를 벗어난 경우도 데이터를 공유할 수 있는 새로운 방법

임베디드 프로그래밍을 할 때 메모리에 직접 접근하는 경우나 동적 할당한 메모리를 사용하는 경우에 반드시 필요

포인터 없이 한 번의 함수호출로 두 변수의 값을 바꾸는 함수는 불가능함.

 

▷chapter 9-1 포인터의 기본 개념

 

메모리 : 데이터를 넣고 꺼내 쓰는 공간

주소 연산자 &로 변수가 할당된 메모리의 위치를 확인 (단항 연산자, 변수만을 피연산자로 사용하여 시작 구조를 구함)

- 이를 이용하여 변수에 할당된 메모리의 시작 주소 확인 및 시작주소에 변수 크기를 더하면 얼마만큼 할당되었는지 확인 가능

 

메모리의 주소는 필요할 때마다 주소 연산을 하는 것보다 한 번 구한 주소를 저장해서 사용하는 것이 편리함

주소는 상수이고 포인터는 변수이다. 주소와 포인터의 크기는 자료형과 상관없이 크기가 같다.

- 포인터가 바로 변수의 메모리를 주소를 저장하는 변수

- 주소를 저장할 포인터도 변수처럼 선언하고 사용

- 변수 앞에 *(간접 참조 연산자)를 붙인다. ex) int *pa

- 포인터의 자료형은 변수의 자료형을 적는다.

- 포인트 변수가 선언되면 메모리에 저장 공간이 할당되고 그 이후 변수명으로 사용할 수 있다.

- x→y : x는 포인터이며 변수y의 주소를 저장하고 있다라는 뜻 (이 경우 '가리킨다'라고 함)

 

const를 사용한 포인터 > 변수의 값을 바꿀 수 없다.

 

구분 사용 예 기능
주소 연산자 int a;
&a;

변수 앞에 붙여 사용하며, 변수가 할당된 메모리의 시작 주소 값을 구한다.
포인터 char *pc;
int *pi;
doible *pd;
시작 주소 값을 저장하는 변수며, 가리키는 자료형을 표시한다.
간접 참조 연산자 *pi = 10; 포인터에 사용하며, 포인터가 가리키는 변수를 사용한다.

 

▷chapter 9-2 포인터 완전 정복을 위한 포인터 이해하기

포인터 (주소 저장, 포인터끼리 대입가능, 대입 연산 기준 엄격)

= 특징을 이해한다면 더 잘 이용할 수 있다.

 

포인터의 대입규칙

1. 포인터는 가리키는 변수의 형태가 같을 떄만 대입해야 한다.

- 일치하지 않을시에는 경고 메세지로 알려줌

2. 형 변환을 사용한 포인터의 대입은 언제나 가능하다.

- 경고 메세지 없이 대입할 수 있으나 사용시에 문제가 없어야 함


선택 미션 Ch.09 도전 실전 예제 (p261) 풀고 인증하기

미니 정렬 프로그램

- 키보드로 실수 3개를 입력한 다음 큰 숫자부터 작은 숫자로 정렬한 뒤 출력하는 프로그램 작성

- 다음 코드와 출력 결과를 참고하여 line_up 함수 작성, line_up 함수에는 이미 정의된 swap 함수를 호출하여 구현

이상입니다.

다들 수고하셨스빈다.