[배열 기초]

 

VC 기준으로 배열의 크기는 상수로 지정해야 한다. gcc는 아님

배열의 이름은 배열의 시작주소. 시작 주소를 가리키는 TYPE* 포인터이다.

 

[포인터 vs 배열]

 

 

둘은 서로 다르다.

test1은 Hello World가 .data 영역(아마도 .rodata)에 존재하는 "Hello World"의 주소를 대입하는건데 read only이기 때문에 값 변경이 불가능하다.

test2는 .data 영역에 존재하는 "Hello World"를 4(8)바이트씩 끊어서 복사한다. 복사해온 값이기 때문에 값 수정이 가능하다.

 

배열을 함수의 인자로 넘기게 되면 배열의 시작 주소만 넘기게 된다.

컴파일러가 알아서 포인터로 치환하는 것이다.

 

[로또 번호 생성기]

 

별거 없음

 

[다중 포인터]

 

이중 포인터 사용시 스택프레임

main                                                              SetMessage

[매개변수][RET][지역변수(msg(Hello주소))] [매개변수(a(&msg))][RET][지역변수]

*a = "Bye"; 를 실행 시 의도한 결과가 나온다. 일차원 포인터로는 char로 이루어진 문자열을 건드리는 것은 call by value나 다름없다.

 

다중 포인터는 그냥 양파까기라고 생각하면 된다.

const char*& a 같은 문법도 사용이 가능하다.

 

[다차원 배열]

 

메모리 할당된것을 보면 성능, 구조적으로 1차원 배열과 똑같이 할당되어있다.

사용시 약간의 계산 순서 차이는 있지만 1차원 배열과 2차원 배열은 다를 게 없다.

3차원 배열 이상 사용하는 경우는 거의 없다.

 

2차원 배열은 대표적으로 2D 로그라이크 맵 생성에 이용한다.

 

[포인터 마무리]

 

TYPE형 1차원 배열과 TYPE*형 포인터는 완전히 호환이 된다.

2차원 배열과 2차원 포인터는 전혀 호환이 안된다.

 

주소값을 다룰 때는 그 주소가 끝까지 유효한지 항상 유의해야 한다.

스택 영역 데이터의 주소값을 밖으로 넘겨줄때는 조심해야한다.

 

[파일 분할 관리]

 

헤더파일의 내용은 최대한 간결하게 유지하는 것이 좋다.

클래스 전방선언때 한번 더 언급할 예정

'C++ > Rookiss C++' 카테고리의 다른 글

[동적 할당] 동적 할당  (0) 2022.08.28
[객체지향 여행]  (0) 2022.08.28
[포인터] #1/2  (0) 2022.08.26
[함수]  (0) 2022.08.26
[코드의 흐름 제어]  (0) 2022.08.26

+ Recent posts