포인터 vs 배열

CJB_ny·2022년 8월 3일
0

C++ 정리

목록 보기
37/95
post-thumbnail

C스타일의 배열의 경우 끝에 '\n' 넣어주야한다.

원래 문자는 배열이다.

이렇게 const char [12]칸짜리 이다.

12인 이유는 '\n'이 들어간 것이다.

이거 두개다 아무런 문제 없이 통과가 되었다.

그러면 포인터와 배열이 같은 것인가...???

=> 배열과 참조를 햇갈리는 것처럼 비슷하지만 다르다.

어셈블리 뜯어보기

지금

1바이트씩 끊어서 보면은 이렇게 들어가있는 것을 확인이 가능하다.

이까지이다. 아스키 코드로 문자가 저장된게

16진수로 48, 65 ... .rodata영역에 이렇게 저장된 거임.

수정할 수 없다!!

현재 이렇게 데이터가 저장이 되어있는데

test1의 크기는 8바이트 짜리 정수형 포인터 변수이다.

여기 시작주소를 test1이 가르키고있는 것이다.

반면,

test의 경우에는

이렇게 4바이트 씩 끊어서 복사를 해주는 것이다.

test2는 별도의 자기 자신만의 바구니가 만들어진게 아니다.

  • 포인터는 [주소를 담는 바구니]

  • 배열은 [닭장] 즉, 그 자체로 같은 데이터 끼리 붙어있는 '바구니 모음'

다만 [배열 이름]은 '바구니 모음'의 [시작 주소]이다.

수정하는 경우 ❗❗❗

test1이 가르키고 있는 곳은 readonly data영역이라

test1[0] = 'r' 이런식으로 수정 불가능

test2의 경우에는 배열 그자체 이기때문에

수정이 가능하다.

배열을 넘길때는 배열의 시작 주소만 넘긴다.

배열끼리 '=' 안되는 이유 ❗

배열의 이름은 시작 주소이기때문에

같은 배열로 선언해놓은 test3에 test2의 시작주소를 할당 할 수 없다.

주소변수명타입
0x12121212test2배열0x89898989
0x22222222test3배열0x22222222

test3가 포인터 변수가 아닌데 값부분을 어떻게 복사를 받나?

ㅇㅋ?

profile
https://cjbworld.tistory.com/ <- 이사중

0개의 댓글