설명좀 ㅠ
&*p 랑 *&p가 p랑같아요?
익명(203.250)
2015-04-21 13:21
추천 0
댓글 20
다른 게시글
-
형들 16진수는 0xff이렇게 쓰는데 [1]C언어허접(180.69) | 15.04.21추천 0
-
???왜케 글삭러가 많냐ㄱㄱ(1.216) | 15.04.21추천 0
-
프로그래머가 실제로 수학 쓸일 없다는건 코딩노예들이 짓거리는 개소리냐? [3]ㅁㄴㅇㅁㄴ..(106.242) | 15.04.21추천 0
-
mfc 한물감? ㅋ [2]ㄻㄴㅇ(121.131) | 15.04.21추천 0
-
(c언어) 형님들 여기서 float쓰는거랑 double쓰는거랑 뭔차이죠? [9]FREE(kingsnal) | 15.04.21추천 0
-
개념글 미드 제목 뭐임? [1]하하(119.195) | 15.04.21추천 0
-
어플 개발자가 되고싶은데 c언어 다음에 뭐해야되? [3]ㅁㄴㅇ(175.118) | 15.04.21추천 0
-
이클립스만켰는데도.. 나의 메모리가.. [5]좌봐충(106.242) | 15.04.21추천 0
-
디자인패턴 책 뭐가 적절하냐? [2]익명(211.118) | 15.04.21추천 0
-
자바?NoOTL(shippuden91) | 15.04.21추천 0
p를 포인터라고 생각했을 때, &*p는 p와 같고, *&p는 p와 같다.
왜요? ㅠ
포인터 변수도 변수입니다. p는 포인터 변수의 값을 나타냅니다. 포인터 변수가 담는 값은 누군가의 주소값이겠죠.
&와 *은 우선순위가 같고 결합법칙이 오른쪽에서 왼쪽이니까 &*p는 &(*p)와 같고 *&p는 *(&p)와 같은데 한단계 한단계 전개해나가면
죄송합니다. 같지 않은 거 같습니다.
p가 포인터가 아니라면 &*p는 오류가 나고 *&p는 p랑 같겠지. 포인터라면 &*p == *&p == p 이겠지만.
ㅅㅅㅅ // &*p는 잘 이해가 안갑니다.
가령 p가 (int *)100 이라고 쳐보자. 즉 100번지에 존재하는 int 형 공간을 가리켜. *p는 그 메모리 공간의 값을 의미할 거고, 다시 &*p하면 다시 (int *)100이 나온다. &p는 p라는 포인터 변수의 주소값이 되고 *&p하면 포인터 변수의 내용이 접근되겠지. 그리고 이 둘은 모두 p라는 포인터 변수의 내용인 p와 같고.
테스트 해봤는데 같고 p == NULL인 경우에도 &*p == *&p == p 성립
생각해보니 이건 컴파일 타임에 결정되는 거라
p.s: 근데 난 가령이라는 말 잘 안 쓰는데 코세님을 존경하기 때문에 코세 성님의 말투 따라 가령이라는 말 많이 쓰게 됨 ㅋㅋㅋ
ㅅㅅㅅ // &(메모리 공간의 값)에서 메모리 공간에 들어있는 값이 예를 들어 20 인데 이 값을 여러 메모리에서 담고 있으면 어떻게 되나요?
뭔 소리여. 그 메모리 공간에 실제로 들어있는 값과 상관 없이 그냥 그 메모리 공간에 접근할 껄 접근하는 대신 주소만 빼오는 게 &인데. int a = 20, b = 20; 이라고 해서 &a하면 엉뚱하게 b의 주소가 나오지는 않잖아.
어셈으로 치면 일반 접근 연산은 MOV, &는 LEA 명령어에 해당하는 데.
&*p는 &(20)이 되지 않나요?
상수에 주소가 어딨어. 다른 연산자와 다르게 *, & 연산자는 좀 특별하다. 좀 고풍스럽게 말하면 다른 연산자들이 r-value를 대상으로 r-value 값을 내보낸다면 * 연산자는 r-value를 l-value로 바꿔주는 연산이고 & 연산자는 l-value를 r-value로 바꿔주는 연산이야.
그러니까 *(int *)0x100 이라고 하면 이건 0x100 번지에 들어있는 int 형 값 자체만을 뜻하는 게 아니라 이 수식이 제대로 값이 평가되기 전까지는 하나의 변수로 작용한다.
아 그렇군요 ㅠㅠ 감사합니다.
섹스해 섹스
안같아