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의 시작주소를 할당 할 수 없다.
주소 | 변수명 | 타입 | 값 |
---|---|---|---|
0x12121212 | test2 | 배열 | 0x89898989 |
0x22222222 | test3 | 배열 | 0x22222222 |
test3가 포인터 변수가 아닌데 값부분을 어떻게 복사를 받나?
ㅇㅋ?