향상된 C언어

이건민·2022년 4월 16일
0

powerC++

목록 보기
8/12
post-thumbnail

📒 레퍼런스(reference) : 변수의 별명

레퍼런스 선언 및 초기화
int& ref = var;

  • 레퍼런스는 메모리 공간에 할당되지 않는다.(가리키는 대상이 변경될 수 없다.)

  • 레퍼런스는 반드시 선언과 동시에 초기화되어야한다.(NULL이 될 수 없다)

  • 레퍼런스를 상수로 초기화하면 컴파일 에러









📒 포인터 vs 레퍼런스

  • 참조하는 대상이 수시로 바뀌는 경우 -> 포인터 (레퍼런스는 변경 불가)

  • NULL이 될 가능성이 있는 경우 -> 포인터 (레퍼런스는 NULL값 가질 수 없음)




📒 인라인 함수

일반적인 함수 호출 시
함수가 정의된 곳으로 점프하여 함수 안의 문장들을 차례로 실행하고 다시 호출한 곳으로 되돌아온다. 함수를 호출할 때는 돌아올 곳의 주소를 스택에 저장하고, 전달되는 값들을 스택에 저장하여야한다.

크기가 작은 함수의 경우, 함수 호출을 하지 않고 코드를 복붙해서 넣어주는 편이 효율적이다 -> 인라인 함수 사용

인라인 함수 사용법

  • 그냥 함수 앞에 inline키워드 사용







📒 malloc, free vs new, delete

  • malloc와 free는 헤더파일 필요, new, delete는 언어에서 제공하는 기본 키워드 (malloc은 함수, new는 연산자)

  • malloc은 해당 포인터의 자료형을 모르기 때문에 void* 로 리턴한다. 때문에 malloc 사용시 type casting을 해주어야 한다.

  • 하지만 new의 경우 해당 객체에 맞는 포인터를 반환한다. 따라서 자료형을 따로 적어주지 않아도 된다. new를 이용해 객체를 생성하면 생성자를 자동으로 호출하여 초기 값을 줄 수 있다. 하지만 malloc의 경우 생성자 호출 기능이 없어 초기값을 줄 수 없다.

  • free와 delete는 메모리를 해제하는 것은 동일하지만 delete는 소멸자를 호출한다.malloc의 경우 realloc을 이용해 메모리 크기를 조정할 수 있다. 하지만 new는 할당된 크기에 대한 메모리 재조정이 불가능하다. 재조정하기 위해서는 새로 할당, 복사, 해제 하는 과정을 통해야 한다. 따라서 객체가 아니고, 재할당이 빈번하게 일어나야 한다면 malloc이 좋은 선택이 될 수 있다.






namespace와 전역변수의 이름이 같을 경우의 접근

전역변수 -> ::var

profile
모든 게시글에 대한 수정 요구 및 지적 환영합니다

0개의 댓글

관련 채용 정보