티스토리 뷰

반응형

02-1 Chapter 02 시작에 앞서

C언어의 복습을 유도하는 확인연습 문제

[문제1] 키워드 const의 의미

const int num=10;

->변수 num을 상수화

const int*ptr=&val1;

->포인터 ptr을 통해 val의 값을 변경할 수 없음

int*const ptr2=&val2;

->포인터 ptr2가 상수화됨

const int *const ptr3=&val3;

-> ptr3가 상수화 되었으며 ptr3을 이용해서 val3의 값을 변경할 수 없음

 

[문제 2]  실행중인 프로그램의 메모리 공간

데이터: 전역변수가 저장되는 공간

스택: 지역변수 및 매개변수가 저장되는 영역(함수호출)

힙: malloc 함수호출에 의해 동적할당

 

[문제 3] Call-by-value vs Call-by-reference

 

 

02-2 새로운자료형 bool

'참'을 의미하는 true와 '거짓'을 의미하는 false

true와 false는 1바이트다. int형의 1과 0과는 다르다.

 

02-3 참조자 (reference)의 이해

변수는 할당된 메모리 공간에 붙여진 이름이다. 그리고 그 이름을 통해서 해당 메모리 공간에 접근이 가능하다.

 

int num1=2010;

num1은 2010이 저장된 메모리의 공간을 가리킨다.

int &num2=num1;

2010이 저장된 공간에 num2라는 이름이 추가된다.

 

참조자는 별칭입니다.

윤성우에게 이리 오라고 해.

흰곰에게 이리오라고 해.

 

참조자 수에는 제한이 없으며, 참조자를 대상으로 참조자를 선언할 수 있다.

int num1=2759;

int &num2=num1;

int &num3=num1;

 

참조자의 선언 가능 범위

 참조자는 변수에 대해서만 선언이 가능하고, 선언과 동시에 누군가를 참조해야한다.

int &ref=20(x)

int &ref(x)

int &ref=NULL;

 

 

02-4 참조자(reference)와 함수

Call-by-value & Call-by-reference

 

주소값을 이용한 call-by-reference

참조자를 이용한 call-by-reference

 

void SwapByRef2(int &ref1, int &ref2)
{
	int temp=ref1;
    ref1=ref2;
    ref2=temp;

}

이것도 call-by-reference로 값이 바꾸기가 가능하다

 

참조자를 이용한 Call-by-reference

 

참조자는 함수의 선언만으로 call-by-reference인지 call-by-value인지 알 수 없다.

void HappyFunc(int prm)

void HappyFunc(int &ref)

-> HappyFunc(num)

 

void HappyFunc(const int &ref)하면 참조자를 통한 값의 변경은 허용하지 않는다.

 

반환형이 참조형(reference type)인 경우

 

int& RefRetFuncOne(int &ref)

{

ref++

return ref;

}

 

#include <iostream>

using namespace std;

int& RefRetFuncOne(int& ref)
{
	ref++;
	return ref;
}

int main(void)
{
	int num1 = 1;
	int& num2 = RefRetFuncOne(num1);

	num1+=1;
	num2+=100;
	
	cout << "num1: " << num1 << endl;
	cout << "num2: " << num2 << endl;
	return 0;
	
}

 

int& num2 = RefRetFuncOne(num1);

int num2 = RefRetFuncOne(num1);

둘은 차이가 있다.

위에 것은 같은 참조자가 되어 같은 변수를 가리키지만

아래 것은 완전히 별개의 변수가 된다.

 

함수의 반환형이 int&가 아닌 그냥 int일 경우에는

int& num2= ReftRetFuncTwo(num1); 같은 연산을 할 수 없다.

 

잘못된 참조의 반환

int& RetuRefFunc(int n)

{

int num=20;

num+=n;

return num;

}

인자 전달이 call-by-value인데, 참조형으로 값을 반환한다.

->하면 안된다.

 

const 참조자의 또 다른 특징.

 

 

02-5 malloc & free를 대신하는 new&delete

C언어에서의 동적할당

-할당할 대상의 정보를 무조건 바이트 크기단위로 전달해야 한다.

-반환형이 void형 포인터이기 때문에 적절한 형 변환을 걸쳐야한다.

 

C++에서의 동적할당

int*ptr1=new int;

double * ptr2=new double;

int * arr1=new int[3];

double*arr2=new double[7];

 

소멸

delete ptr1;

delete ptr2;

delete []arr1;

delete []arr2;

 

객체의 생성에는 반드시 new & delete

new랑 malloc에는 방식의 차이가 있다.

 

힙에 할당된 변수? 이제 포인터를 사용하지 않고 접근할 수 있어요

int *ptr=new int;

int &ref=*ptr;

ref=20;

cout<<*ptr<<endl; //출력결과는 20

 

02-6 C++에서 C언어의 표준함수 호출하기

c를 더하고 h를 빼라.

 

#include <stdio.h> -> #include <cstring>

#include <stdlib.h> -> #include <ctdlib>

반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/04   »
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
글 보관함
반응형