그림으로 보자면.. b[2]까지만 써야지 왜 b[3]이 가능하느냐?..
그림 보시면 가능하지 않습니까?
a[2]에 무엇인가 넣으면 b[0]에 들어가 지죠.
그럼 char *a, *b로 선언하면 주소만 만들고 저장공간은 없지 않냐?
10 이하, 즉 char *a처럼 길이를 선언하지 않은 경우에도
os나 컴파일러에 따라서 10개의 공간이 확보 되는 경우가 있다는 겁니다.
다른 분이 질문하고, 제가 댓글달아 테스트 했던 경우엔 12자리 확보된것도 있고요.
그게 왜 10개인지 12개인지는 저도 잘 모릅니다...
하지만 제가 c를 한참 배우던 시절에 포직스에서 그냥 어레이 쓸것같은 놈들은 10칸은 기본으로 주자..
라는 주장이 있었고, 컴파일러에 따라 그 의견을 수용한게 있었습니다.
그리고, 포직스에서 10자리 선언된것을 표준으로 정한다고 했었는데, 강제 사항은 아니고,
10자리를 잡아도 된다란 허가 사항입니다... 컴파일러의 옵션에 따라 저 상황은 바뀌고,
경험에 다르면 옵티마이즈, 스트립등의 영향도 받는것으로 보입니다.
여유 공간이 있으니까 안전해 진것 같긴 하지만, 놔두었다가 나중에 더 큰 뒷통수 맞습니다.
요즘 툴(커피나 디플랫...)은 메모리에 대해서 프로그래머가 고민하지 않고 써도 큰 상관 없게 만든 툴들이
대부분이라서... 많이 편해진것 같습니다.
알고리즘 최적화등을 해야 하는 수준이면 비트수준 한치의 오차가 없게 빠삭해야 합니다. 일반적으론 필요하지 않습니다.