C 관련 보충 위주로 수업이 진행되었다.
getchar vs gets
getchar : 한 글자를 받아들인다.
gets : 한 문장을 받아들인다.(newline or EOF - 해당 부분은 '\0'으로 대체된다.)
typedef를 이용하여 변수명을 줄일 수 있다.
매크로 함수 : 매크로는 어디까지나 단순 치환이다. 함수의 형태를 하고 있더라도 다르다. 함수 같은 느낌으로 사용하기 위해서는 괄호를 활용해야 한다.
매크로가 활용되는 것과 별개로 개발에 있어서 권장되지는 않는다. 매크로 상수 -> const, 매크로 함수 -> inline
비트 오퍼레이션
- bit filter : X&MASK
- bit set : X&(1 << BIT_POS)
- bit clear : X&(~MASK)
- bit toggle : X^MASK
배열과 포인터
둘은 엄연히 다르다.
포인터 : 특정 메모리의 주소가 저장되어 있는 변수
배열 : 같은 타입의 데이터가 연속적으로 저장되어 있는 변수
포인터를 이용하여 배열을 지정할 수 있지만, 그 반대는 불가
데이터가 어느 영역에 저장되는 지를 잘 고려해야 한다. -> ex) gets()는 어느 변수에 데이터를 받아야 하는 가?
C++
auto : 지역 변수를 의미했던 auto와 다르게 자동으로 변수 타입을 할당하는데 사용
함수에서 정의된 지역 변수의 주소를 사용하는 것은 의미없는 행동이다.
메모리 주소는 실제 물리적 주소인가?
할당한 데이터의 용량과 실제 메모리가 할당된 용량은 다를 수 있다 -> align, 메모리 입출력에 유리하도록
OS가 있는 경우 -> 물리적 주소와 메모리 주소는 다르다.(가상 메모리)
동적메모리 할당
//in C : 함수로 분류
(type*)malloc(byte_size) - free(address)
//in C++ : 연산자로 분류
new type - delete type
반드시 할당된 메모리는 사용 후 해제해 주어야 한다.
매개 변수는 함수 외부에서 접근할 수 없다.(임시 변수)
C++에서 Struct와 Class는 유사한 점이 있다.
const int * pi : L-value인 *pi를 못오게 한다. 즉 참조를 불가하게 한다.
int * const pi : L-value인 pi를 못오게 한다. 즉 주소를 바꾸지 못한다.
이름과 alias
이름으로 부르나 별명으로 부르나 차이는 없다.
int name = 10;
int& alias = name; // 같은 메모리 공간을 가진다. 즉 name의 별명인 셈이고, 둘은 동일하다.
argument에서 &는 직접 참조하겠다는 의미이다.(즉 call by reference를 하겠다.)
& 사용시에는 R-value에는 반드시 메모리 공간에 대한 정보가 있어야 한다.
(즉 L-value가 될 수 있는 값이 와야 한다.)
int &ref = 10; // 불가 - 10은 rdata에 저장되는 값이고, 쓰기 동작이 불가능하다.
const int &ref = 20 // 가능 - 20은 rdata에 저장되는 값이고, 쓰기 동작을 제한했으므로 가능하다.
***값에 의한 호출, 참조에 의한 호출, 주소에 의한 호출***
포인터로 참조 기능을 구현할 수 있지만, 사용이 어렵다는 단점이 있어서, C++는 참조 방식을 제공하여 이러한 단점을 완화하였다.
실행 흐름 제어 : C와 동일
'VEDA 복습 > C, C++' 카테고리의 다른 글
VEDA 10일차 - C++ (0) | 2025.03.28 |
---|---|
VEDA 9일차 - C++ 프로그래밍 (0) | 2025.03.27 |
VEDA 7일차 - C++ 프로그래밍 (0) | 2025.03.25 |
VEDA 6일차 - C 프로그래밍 (0) | 2025.03.24 |
VEDA 5일차 - C 프로그래밍 (0) | 2025.03.21 |