int = 4바이트 차지
int 72
int 73
int 33
이렇게 메모리를 차지하게 된다.
배열안에 int를 넣어놨다고 해서,
int가 4바이트를 차지한다고 해서,
int scores[3];
scores[0] = 72;
scores[1] = 73;
scores[2] = 33;
cores[0], scores[4], scores[4] 라고 읽지 않아도 된다.
컴퓨터가 자료형에 따라 알아서 필요한 공간을 계산
char = 1바이트 차지
string = 글자를 쓴 만큼 차지
알고보니 string -> char의 배열형태였던 것!
string s = "HI!"
s는 몇바이트를 차지할까?
-> 4바이트
\0
: "8비트전체가 0이다" 라는 뜻. null값! 눈에 보이진 않음
null terminating character라고 부른다(null 종단 문자)
그래서 길이가 3인 문자열 -> 4바이트 차지
당연히 자바스크립트에도 이 개념을 그대로 사용하겠지??
int main(void)
{
string names[4];
names[0] = "EMMA";
names[1] = "RODRIGO";
names[2] = "BRIAN";
names[3] = "DAVID";
printf("%s\n", names[0]);
printf("%c%c%c%c%c"\n, names[0], [0], names[0][1], [0][2],[0][3])
printf 의 리턴값은 두개 다 동일하게
"EMMA"
"EMMA"
두개의 결과값은 똑같지만
printf("%s\n", names[0]);
를 했을때는 컴퓨터가 한글자, 한글자 string 안에있는 char를 순회하며 프린트 할것을 골라담지만!
printf는, 메모리 안에있는
\0 // null termination(null 종단문자)
를 딱! 보게되는순간
여기까지!!!!!
를 외치고 방금 전까지 담았던 char들만 출력
하는 시스템이라고 한다.
자바스크립트도 똑같겠지? 프로그래밍 이면에 이런 깊은 속사정이 있었다니, 놀랍다!
추가(2021.02.05): C와는 다르게 자바스크립트는, 문자열을 저장할 때, 문자들과 문자열의 길이 속성을 따로 저장해 두어 관리 한다고 한다. 내부 엔진에서 어떻게 찾는지 공개적으로 공개된 것은 없다고 한다(알고싶다...)
출처: https://stackoverflow.com/questions/12603931/why-doesnt-the-null-terminator-placed-arbitrarily-in-a-string-terminate-it
null 종단문자를 보고 싶으면
printf("%c%c%c%c%c"\n, names[0], [0], names[0][1], [0][2],[0][3],[0][4])
이렇게 string의 길이와 같은 인덱스를 눌러보면,
EMMA0
이라고 출력된다.
하지만 자바스크립트 에서는 안나오는 구만!
아래 이미지는 자바스크립트 콘솔로그임
printf만의 속성인 것 같다.
-> 그저 인덱스만 알려주면 된다. 자세한건 추후 강의에서 배운다고 한다...!
-> 컴퓨터 메모리 용량만큼
메모리에는 이렇게 저장 된다.
문자열 이라는 말을 여기서 깨달은 것 같다!
출처 : [부스트코스] 모두를 위한 컴퓨터 과학 (CS50 2019) (https://www.boostcourse.org/)