포인터로 캐스팅하면 그것이 l-value가 되나요???
글쓴이: syayiyip / 작성시간: 토, 2011/12/03 - 10:33오후
((int *)a)++;
라는게 문법에 어긋나지 않으려면 (int *)로 캐스팅 한 후에도 그것이 l-value 이어야 하는 것 같은데
예전에 어디서 본 기억으로는 포인터 캐스팅은 l-value가 아니라고 본 기억이 나서요.
위 구문이 문법에 맞는 것인지요?
별도로 추가 질문...
int a;
int *b;
b = &a;
*a = 5; <--------- 여기서 * 연산자를 뭐라고 부르나요?
-------------- 수정 -------------
*a = 5; 를 *b = 5; 로 바꿔주세요.
Forums:
....
((int *)a)++
를 했을경우 ++의 대상이 될 (int *)a 가 존재하지 않으므로 (존재하는것은 a 뿐이지 int*로 캐스팅된 a 가 아님) rvalue입니다.
추가질문은 문법에러
친절한 답변 감사드립니다.
친절한 답변 감사드립니다만, 제 이해력이 부족해서인지 몇번을 다시 읽어도 무슨 뜻인지 이해가 잘 안되네요.
(int *)a 가 존재하지 않는다는게 무슨 뜻이죠?
포인터 캐스팅이 r-value 라면 ((int*)a)++ 와 같은 구문은 문법에러일텐데
실제로 많은 컴파일러들이 이러한 구문을 에러없이 처리해주는 것으로 알고 있습니다.
표준엔 어긋나지만 관용적으로 많이 쓰이는 구문이라 그냥 지원해주는건가요?
에러없이 처리해 주지 않습니다. 다른 경우와
에러없이 처리해 주지 않습니다.
다른 경우와 혼동하시는 것 같군요.
직접 가능할 꺼 같은 예제를
만들어서 해 보시면 아실 겁니다.
제가 착오가 있었나봅니다.
제가 착오가 있었나봅니다.
문법에러가 맞네요.
답변 감사합니다.
*, &
*은 dereference opreator, &은 reference operator로 불립니다.
적당한 한국어 표현은 잘 모르겠습니다.
이젠 C를 하지 않치만..
저도 혼돈이 많이 되었던거라..
선언시
int* b; int형을 가리키는 포인터 b
사용시
b; 포인터 b가 가르키는 int 값의 Address
*b; 포인터가 b가르키는 Address에 담겨져 있는 int형 값
그래서 선언시 * 의 위치를 가지고도 논쟁이 있습니다.
저는 int* b 라고 선언을 하죠, *를 int에 붙여서 포인터형 변수라는 것을 강조합니다.
============================================================
선한 인간이냐 악한 인간이냐는 그사람의 의지에 달렸다. -에픽테토스-
의지 노력 기다림은 성공의 주춧돌이다. -파스퇴르-
============================================================
int *a; 가 권장되는 것으로 압니다.
int *a;
int* a;
둘다 문법에 맞는 구문이므로 프로그래밍 스타일상 편한대로 하면 되겠으나
int* a, b;
int *a, b;
이와 같은 경우에 전자의 경우는 혼동을 줄 수가 있기 때문에 후자와 같은 방식이 권장되는 것으로 압니다.
댓글 달기