배열 이름(여기서는 a)은 lvalue가 맞습니다. 그러나 C에서의 lvalue는 전통적인 left value가 아니라 locator value를 뜻합니다. 대입 연산자 = 의 왼쪽에 올 수 있는 것은 modifiable lvalue 뿐입니다. 배열 이름은 lvalue이지만 modifiable lvalue가 아니기 때문에 대입 연산자의 왼쪽에 올 수 없습니다.
한가지 더, 배열 이름은 몇가지 경우(sizeof, & 연산자의 피연산자, 문자형 배열 초기화에 사용되는 문자열 상수)를 제외하면 대부분 첫번째 원소를 가리키는 포인터로 자동 변환됩니다. 이 점 때문에 배열 이름을 주소 상수라고 설명하는 책이 많습니다만, 엄밀하게 말하자면 포인터로 자동 변환된다고 설명하는 쪽이 옳습니다.
어떤 환경에서 되나요...? 제가 보기엔 안 되는게 정상일 거 같은데..
어떤 환경에서 되나요...? 제가 보기엔 안 되는게 정상일 거 같은데...-_-;;
간단한 방법은 a[8]을 *a로 선언하고
a = (char *)SomeValues;
로 해주는 것입니다...
음, 하지만 포인팅을 한 것이니 정확히 말해서 가져오는 건 아니군요. 가져오려면 루프를 돌리면서 일일이 엔트리를 집어넣어주거나 memcpy를 쓰는 수 밖엔 없을 것 같은데요..?
노루가 사냥꾼의 손에서 벗어나는 것 같이, 새가 그물치는 자의 손에서 벗어나는 것 같이 스스로 구원하라 -잠언 6:5
[code:1]const char SomeValues[8]
a는 주소상수입니다. 따라서 원칙적으로 변수가 아닌 a에 다른 값을 배정할 수 없습니다.
내 블로그: http://unipro.tistory.com
[quote="unipro"][code:1]const char SomeV
배열 이름(여기서는 a)은 lvalue가 맞습니다. 그러나 C에서의 lvalue는 전통적인 left value가 아니라 locator value를 뜻합니다. 대입 연산자 = 의 왼쪽에 올 수 있는 것은 modifiable lvalue 뿐입니다. 배열 이름은 lvalue이지만 modifiable lvalue가 아니기 때문에 대입 연산자의 왼쪽에 올 수 없습니다.
한가지 더, 배열 이름은 몇가지 경우(sizeof, & 연산자의 피연산자, 문자형 배열 초기화에 사용되는 문자열 상수)를 제외하면 대부분 첫번째 원소를 가리키는 포인터로 자동 변환됩니다. 이 점 때문에 배열 이름을 주소 상수라고 설명하는 책이 많습니다만, 엄밀하게 말하자면 포인터로 자동 변환된다고 설명하는 쪽이 옳습니다.
댓글 달기