-
윤성우 열혈 C++ 프로그래밍 2장) C언어 기반의 C++ 2(bool형 자료형, 참조자, const, new&delete)PROGRAMMING/C++ 2023. 12. 20. 20:47
이번 시간에는 C언어를 많이 복기해야 했다. 기억이 1도 나지 않았기 때문에 윤성우님이 카페에 올려준 열혈 C ppt 파일을 보면서 복기했다. 그럼 이제 C++하러 고고씽~
(혹시 저작권에 문제가 있다면 수정하겠습니다!! 개인적인 공부용으로 정리함을 알려드립니당)
https://product.kyobobook.co.kr/detail/S000001589147
C언어의 복습- const의 의미
const int num = 10; cont int *ptr = &val1; /// 이 데이터의 값이 상수 int const *ptr = &val1; /// 이 포인터의 주소값이 상수 const int const *ptr = &val1;
bool 자료형
sizeof(true); // 1 sizeof(false); // 0 int isTrue = 1, isFalse = 0; sizeof(isTrue) = 4; sizeof(isFalse) = 4;
참조자
변수 : 할당된 메모리 공간에 붙여진 이름
&연산자 :
1. 이미 선언된 변수의 앞에서는 주소 값의 반환
2. 새로 선언되는 변수의 이름 앞에서는 참조자의 선언
int &num2 = num1; /// 참조자로 사용
참조자 : 자신이 참조하는 변수를 대신할 수 있는 또 하나의 이름(변수의 별명)
- 참조자와 변수는 선언 방식에 있어 차이가 있지만, 일단 선언되고 나면 차이가 없다.
- 참조자의 수에 제한이 없으며 참조자를 대상으로도 참조자를 선언할 수 있다.
- 배열 요소(배열이 아님)과 포인터 변수 역시 변수이므로 참조자 선언이 가능하다.
int num = 10; int *ptr = # int **dptr = &ptr; int &ref = num; int *(&pref) = ptr; int **(&dpref) = dptr;
참조자와 함수(참조자는 함수와 함께 많이 쓰인다!)
C++에서 함수 외부에 선언된 변수를 접근하는 2가지 방법
1. 주소값을 이용한 Call-by-reference
2. 참조자를 이용한 Call-by-reference
⭐ 참조자를 이용해 정의한 함수 void SwapByRef(int &num1. int &num2)을 SwapByRef(23, 45)로 호출시 에러
(변수가 아닌 input이라서)
참조자의 단점 : 함수를 직접 확인해야지만 변경이 일어났는지 알 수 있음
→ const를 이용해 어느정도 극복
void Func(const int &ref){} /// 함수 내에서 참조자 ref를 이용한 값의 변경은 허용하지 않는다.
🌲만들면 좋은 습관 🌲
함수 내에서 참조자를 통한 값의 변경을 진행하지 않을 경우 참조자를 const로 선언하자!
🚨조심🚨
함수에서 지역변수를 참조형으로 반환하는 일은 없어야 한다!!!
상수화된 변수의 참조자
const int num = 20; const int &ref = num;
const 참조자의 상수 참조
const int &ref = 50;
const 참조자는 아래와 같은 경우에 유용하다
int Adder(const int &num1, const int &num2){ return num1 + num2; } cout << Adder(3, 4) << endl;
new와 delete
int * ptr1 = new int; delete ptr1; double * ptr2 = new double; delete ptr2; int * arr1 = new int[3]; delete []arr1; double arr2 = new double[7]; delete []arr2;
🚨조심🚨
C++에서는 malloc과 free 함수의 호출이 문제가 될 수도 있다.
C++에서는 new 연산자를 이용해서 할당된 메모리 공간도 변수로 간주하여 참조자의 선언이 가능하다.
(참조자의 선언을 통해 포인터 연산 없이 힙 영역에 접근 가능)
C와 C++의 라이브러리
C라이브러리는 .h를, c++라이브러리는 c를 붙여라!
C의 표준 헤더보다는 C++의 표준헤더를 이용하는 것을 추천한다.
#include <stdio.h> -> #include <cstdio>
strlen, strcat, strcpy, strcmp
C언어 스타일의 함수로 함수 원형을 살펴보면 char * str을 인수로 갖는 것을 알 수 있다. 그러면 문자의 끝을 널문자로 인식한다고 보여지므로 string을 사용하면 작동하지 않는다.
/// strlen size_t strlen(const char* str);
난수 만들기(rand, srand, time)
해더파일 범위 비고 rand <cstdio> 0과 RAND_MAX(32767) 사이의 값 반환 여러번 시행시켜도 동일한 값 (시드가 고정되어 있음) srand 시드를 직접 고정해야 함 time <ctime> - srand(unsigned int)time(NULL)의 형태로 자주 쓰임 'PROGRAMMING > C++' 카테고리의 다른 글
SwapPointer(포인터가 가리키는 대상이 서로 바뀌도록 하는 함수) 윤성우의 열혈 C++ 문제 2-1-3 (0) 2023.12.26 윤성우 열혈 C++ 프로그래밍 3장) 클래스의 기본(struct와 class, private와 public, 파일분할, 객체지향 프로그래밍) (1) 2023.12.22 윤성우 열혈 C ppt 정리본(chapter 17 ~ chapter 30) (2) 2023.12.19 윤성우 열혈 C ppt 정리본(chapter 1 ~ chapter 16) (2) 2023.12.18 윤성우 열혈 C++ 프로그래밍 1장) C언어 기반의 C++ (0) 2023.12.13