메모리
컴퓨터 메모리는 16진수
EX. 10=>16, 0A=>10, FF=>255(16x15+15)
16진수 앞에는 '0x'표시를 붙여 표시한다.
int는 4byte(32bit)
RGB컬러
FF | 00 | 00 => R(Red)가 255만큼, G랑 B는 0이므로 #FF0000이 빨간색인 것
&와 *의 차이점
&: Get the address(&다음 써있는 변수의 메모리 주소)
*: Go to that address(*다음 써있는 주소에 들어있는 값)
*뒤에 주소를 직접 쓰려면 형식 변환을 해야됨
포인터
int *p => 주소값을 받기 위한 포인터변수 p를 선언, 주소에 들어있는 데이터가 int형이라는 뜻
이러면 \p 출력시에는 주소값이 출력되고, *p 출력시에는 주소에 있는 정수값이 출력됨.
주소를 저장하려면 무조건 *을 써야함. 안그럼 컴파일 에러남.
포인터를 많이 쓰면 아주 정교한 자료형을 만들 수 있음.
동적 메모리:
프로그램 실행 도중 필요한 만큼 시스템에서 메모리를 할당 받아 쓰고 다쓰면 반납하는 메모리
malloc()
char *t = malloc(strlen(s) + 1);
free(t);
동적 메모리 할당할때 쓰임. EX) int *x = malloc(10 * sizeof(int));
=> 이러면 x[0]부터 x[9]까지의 메모리를 쓸 수 있음
int가 4byte니까 x에 40byte를 할당함. 사실 malloc은 시작주소를 리턴함.
malloc을 호출할 때 마다 힙영역에서 메모리를 가져다 씀
힙, 스택
malloc은 힙영역에서 메모리를 사용,
main함수의 지역변수는 스택영역에,
전역변수는 힙 위에 쌓임
버퍼 오버플로우
메모리 공간 혹은 배열을 넘어 접근하는 것
메모리에 신경쓰며 swap함수 구현하는 방법
void main(){
int x=1;
int y=2;
swap(&x, &y);
}
void swap(int *a, int *b){
int tmp=*a;
*a = *b;
*b = tmp;
}
참고 강의: https://www.boostcourse.org/cs112/lecture/119027?isDesc=false
https://www.boostcourse.org/cs112/lecture/119036?isDesc=false
malloc, 포인터 개념들이 헷갈렸었는데 위 링크를 통해 명료하게 정리됨!
이제 구조체랑 클래스 차이를 이해해야겠다..