3:55 질문드립니다
배열명(identifier)은 lvalue입니다. 그리고 "배열이름이 포인터 상수다"라고 하는 것보다 배열이름이 포인터로 "형변환"된다라고 하는 게 맞다고 생각합니다. 왜냐하면 특정 경우를 제외하고, 배열 타입의 표현식(지금의 경우는 배열명)이 첫 번째 원소를 가리키는 포인터로 형변환되기 때문입니다. 아래는 제가 스택 오버플로우에서 찾은 질문과 관련된 답변과 함께 C 표준(C standard)를 참조한 내용입니다. (제가 잘못 해석했을 수도 있기 때문에 잘못된 부분이 있으면 지적바랍니다.) 1. lvalue는 개체(object)를 나타내는(designate) 표현식이다. 2. 식별자는 개체(object)를 나타내는(designate) 것으로 선언된다면, 주 표현식(primary expression)이다. (이 경우에 식별자는 lvalue이다.) 3. sizeof 연산자와 & 연산자의 피연산자, 배열 초기화에 사용되는 문자열 리터럴일 때를 제외하고, "어떤 형(type)의 원소로 이루어진 배열"을 나타내는 표현식은 배열 개체의 첫 번째 원소를 가리키는 "어떤 형(type)에 대한 포인터"를 나타내는 표현식으로 형변환되며 lvalue가 아니다. 스택 오버플로우 여기서, 앞의 표현식은 배열명(식별자)이고 뒤의 표현식은 &배열명[0]를 의미하는 것 같습니다. &는 주소값을 계산하므로 rvalue(표현식값)가 됩니다. 배열은 배열이고 포인터는 포인터이기 때문에, '배열이름이 포인터 상수다'는 적절하지 않습니다.