주소연산자(&)에서 피연산자는 lvaue여야 합니다. (C++03 5.3.1/2).
왜냐하면, 영속적인 객체의 주소를 가지는 것은 괜찮지만, 임시적인 객체의 주소를 가지는 것은 굉장히 위험 하기 때문입니다.
출처 - http://scor7910.tistory.com/66
제가 아직 문자열상수에 대해서 제대로 된 이해를 못했는지는 모르겠지만..
일단 문자열상수는 실행파일 상수영역에 보관되고 있다면
char* c = "ㅁㄴㅇㄹ";
c라는 char*형 변수에 "ㅁㄴㅇㄹ"라는 문자열 상수의 번지를 대입하는 것으로 lvalue에 rvalue를 대입한것 아닌가요?
const char (*c)[9] = &"ㅁㄴㅇㄹ";
위 문서에 따르면 rvalue는 임시적인 값이므로 &연산자가 붙으면 안된다고 되어있는데
문자열은 예외라고 할 수 있나요?