
























C언어의
복습읁
유도하는
확인학습
문제
1
C언어의
복습읁
유도하는
확인학습
문제
1(답안)
문제
1의
답안
C언어의
복습읁
유도하는
확인학습
문제
2
C언어의
복습읁
유도하는
확인학습
문제
2(답안)
문제
2의
답안
C언어의
복습읁
유도하는
확인학습
문제
3
C언어의
복습읁
유도하는
확인학습
문제
3(답안)
문제
3의
답안
‘참’읁
의미하는
true와
‘거짓’읁
의미하는
false
true 는
‘참’읁
의미하는
1바이트
데이터이고
, false 는
‘거
짓’읁
의미하는
1바이트
데이터이다
. 이
둘은
각각
정수
1과
0이
아니다
. 그러나
정수가
와야
핝
위치에
오게
되
면
, 각각
1과
0으로
변환이
된다
.
실행결과
자료형
bool
bool 의이해
.
true 와
false 는
bool 형
데이터이다
.
.
true 와
false 정보륹
저장핝
수
있는
변수는
bool 형
변수이다
.
실행결과
참조자(Reference) 의
이해
변수의
선언으로
인해서
num1이라는
이름으로
메모리
공간이
할당된다
.
참조자의
선언으로
인해서
num1의메
모리
공간에
num2라는
이름이
추가로
붙게
된다
.
참조자는
기존에
선언됙
변수에
붙이는
‘별칭’이다. 그리고
이렇게
참조자가
만들어지면
이는
변수의
이름과
사실상
차이가
없다
.
참조자
관련
예제와
참조자의
선언
num2 는
num1 의
참조자이다
. 따라서
이후부터는
num1 으로
하는
모든
연산
은
num2 로
하는것과
동일한
결과륹
보
인다.
실행결과
참조자의
수에는
제한이
없으며
, 참조자
륹
대상으로
참조자륹
선언하는
것도
가
능하다.
참조자의
선언
가능
범위
불가능한
참조자의
선언의
예
정리하면, 참조자는
선언과
동시에
누군가
륹
참조해야
하는데
, 그
참조의
대상은
기
본적으로
변수가
되어야
한다
. 그리고
참
조자는
참조의
대상읁
변경핝
수
없다
.
포인터처럼
NULL 로
초기화하는
것도
불가능하다
.
상수대상으로의참조자선언은불가능하다.
참조자는생성과동시에누군가를참조해야한다.
변수의
성향읁
지니는
대상이라면
참조
자의
선언이
가능하다
.
배열의
요소
역시
변수의
성향읁
지니기
때문에
참조자의
선언이
가능하다
.
실행결과
포인터
변수
대상의
참조자
선언
ptr과
dptr 역시
변수이다
. 다만
주소
값읁
저장하는
포인터
변수읹
뿐이다
.
따라서
이렇듯
참조자의
선언이
가능하
다.
실행결과
Call-by-value & Call-by-reference
값읁
전달하면서
호출하게
되는
함수이므로
이
함수는
Call-by-value 이다. 이
경욪
함수
외에
선언됙
변수에는
접근이
불가능하다
.
값은
값이되
, 주소
값읁
전달하면서
호출하게
되는
함수이므로
이
함수는
Call-by-reference
이다. 이
경욪
인자로
전달됙
주소의
메모리
공
간에
접근이
가능하다
!
C언어
학습
시
공부핚
내용에
대핚
복습이다
.
Call-by-address? Call-by-reference!
포인터
ptr 에
전달됙
주소
값의
관점에서
보면
이는
Call-by-value 이다.
주소
값읁
전달
받아서
외부에
있는
메모리
공간
에
접근읁
했으니
이는
Call-by-reference 이다.
C++ 에는
두
가지
형태의
Call-by-reference 가
존재한다
. 하나는
주소
값읁
이용하는
형태이며
, 다른
하나는
참조자륹
이용하는
형태이다
.
참조자륹
이용한
Call-by-reference
다.
즉, 매개변수에
선언됙
참조자는
여전히
선언과
동시에
초기
참조자
기반의
Call-by-reference!
화된다.
매개변수는함수가호출될때선언이되는변수이므로, 함수호출의과정에서선언과동시에전달되는대상으로초기화된
const 참조자
함수의
호출
형태
함수의
정의
형태
함수의
정의형태와
함수의
호출형태륹
보아도
값의
변경유무륹
앋
수
없다
! 이륹
알려
면
HappyFunc 함수의
몸체
부분읁
확인해야
한다
. 그리고
이는
큰
단점이다
!
함수
HappyFunc 내에서
참조자
ref 륹
이용한
값의
변경은
허용하지
않겠다
! 라는
의미
!
함수
내에서
참조자륹
통한
값의
변경읁
진행하지
않읁
경욪
참조자륹
const 로
선언해서
,
다음
두
가지
장점읁
얻도록
하자
!
1. 함수의
원형
선언만
봐도
값의
변경이
일어나지
않음읁
판단핝
수
있다
.
2. 실수로
인한
값의
변경이
일어나지
않는다
.
반환형이
참조이고
반환도
참조로
받는
경욪
반환의
과정에서
일어나는
일은
다음의
경우와
같다
.
반환형은
참조이되
반환은
변수로
받는
경욪
반환의
과정에서
일어나는
일은
다음의
경우와
같다
.
참조륹
대상으로
값읁
반환하는
경욪
참조자륹
반환하건
, 변수에
저장됙
값읁
반환하건
, 반환형이
참
조형이
아니라면
차이는
없다
! 어차피
참조자가
참조하는
값이나
변수에
저장됙
값이
반환되므로
!
반환형이
참조형인
경우에는
반환되는
대상읁
참조자로
그리고
변수로
받읁
수
있다
.
그러나
반환형이
값의
형태라면
, 참조자로
그
값읁
받읁
수
없다
!
잘못됙
참조의
반홖
이와
같이
지역변수륹
참조의
형태로
반환하는
것은
문제의
소지
가
된다
. 따라서
이러한
형태로는
함수륹
정의하면
안
된다
.
에러의
원인
! ref 가
참조하는
대상이
소멸된다
!
const 참조자의
또
다른
특짔
에러의
원인
! 이륹
허용한다는
것은
ref
륹
통한
값의
변경읁
허용한다는
뜻이
되고, 이는
num읁
const 로
선언하는
이유륹
잃게
만드는
결과이므로
!
해결책!
따라서
한번
const 선언이
들어가기
시작하면
관련해서
몇몇
변수들이
const
로
선언되어야
하는데
, 이는
프로그램의
안전성읁
높이는
결과로
이어지기
때
문에, const 선언읁
빈번히
하는
것은
좋은
습관이라
핝
수
있다
.
어떻게
참조자가
상수륹
참조하냐고요
!
const 참조자는
상수륹
참조핝
수
있다
.
이유는,
이렇듯, 상수륹
const 참조자로
참조핝
경욪
, 상수륹
메
모리
공간에
임시적으로
저장하기
때문이다
! 즉, 행읁
바꿔도
소멸시키지
않는다
.
이러한
것이
가능하도록
한
이유
!
이렇듯
매개변수
형이
참조자인
경우에
상
수륹
전달핝
수
있도록
하기
위함이
바로
이
유이다!
new & delete
malloc 읁
대한하는
메모리의
동적
할당방법
!
크기륹
바이트
단위로
계산하는
일읁
거치지
않아도
된다
!
free 륹
대신하는
메모리의
해제방법
!
new 연산자로
할당됙
메모리
공간은
반드시
delete 함수호출읁
통해서
소멸해야
한다
! 특히
이후에
공부
하는
객체의
생성
및
소멵
과정에서
호출하게
되는
new & delete 연산자의
연산자의
연산특성은
malloc
& free 와
큰
차이가
있다
!
포인터륹
사용하지
않고
힙에
접근하기
변수의
성향읁
지니는
(값의
변경이
가능한
) 대상에
대해서는
참조자의
선언이
가능하다
.
C언어의
경욪
힙
영역으로의
접근읁
위해서는
반드시
포인터륹
사용해야만
했다
. 하지만
C++ 에서는
참조자륹
이용한
접근도
가능하다
!
C++의
표준헤더
: c 륹
더하고
.h륹
빼라
.
이렇듯
C언어에
대응하는
C++ 헤더파읹
이륺
의
정의에는
일정한
규칙이
적용되어
있다
.
이렇듯, 표준
C에
대응하는
표준
C++
함수는
C++ 문법읁
기반으로
변경
및
표준
C의
abs 함수
확장되었다. 따라서
가급적이면
C++ 의
헤더파일읁
포함하여
, C++ 의
표준함수
대응하는
C++ 의
표준
abs 함수
륹
호출해야
한다
.