티스토리 뷰
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>
'프로그래밍 > 윤성우의 열혈 C++' 카테고리의 다른 글
Chapter 06 friend와 static 그리고 const (0) | 2022.03.08 |
---|---|
05 복사생성자(copy constructor) (0) | 2022.03.07 |
Chpater 04 클래스의 완성 (0) | 2022.03.05 |
Chapter 03 클래스의 기본 (0) | 2022.03.04 |
Part 01 C++로의 전환/ Chapter 01 C언어 기반의 C++1 (0) | 2022.03.03 |
- Total
- Today
- Yesterday
- Python
- 데이터분석
- 일본어
- 열혈프로그래밍
- 통계
- 인지부조화
- stl
- 강화학습
- 오블완
- 회계
- 통계학
- 일본어문법무작정따라하기
- 인프런
- 일문따
- K-MOOC
- 류근관
- C/C++
- 코딩테스트
- jlpt
- 윤성우
- 사회심리학
- 티스토리챌린지
- 뇌와행동의기초
- c++
- 보세사
- 심리학
- 여인권
- C
- 파이썬
- 백준
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |