1. 저장된 값이 0x20000000의 줄임말일 경우 (즉 *pChar==0x20000000 )
2. pChar가 가리키고 있은 주소가 0x20000000 일 경우 (즉 pChar== 0x20000000)
근데.. pChar가 char *형이므로 *pChar에는 0x20000000(4바이트)가 저장될 수 없습니다.
즉 *pChar는 한 바이트 데이터되겠습니다. 그럼 일단 1번은 말이 안됩니다. (0x20000000는 4바이트니까요)
혹시라도 질문하신 님께서 1번의 의미로 질문하신거라면 아래와 같이 되는데
0x???????? :0x20
0x????????+1 :0x00
0x????????+2 :0x00
0x????????+3 :0x00 or 0x01
0x????????는 pChar의 주소가 되겠습니다.
이 경우 0x????????+3의 값에 상관없이 *pShort값은 0x2000이 되겠습니다.
근데 위에서 말씀드린것처럼 *pChar에 0x20000000가 저장 될수 없으므로 질문하신 경우가 아닌것 같습니다.
그럼 2번으로 해석을 해야 하는데, 아래와 같이 가정하면
0x20000000 :0xAA
0x20000001 :0xBB
0x20000002 :0xCC
0x20000003 :0xDD
0x20000000을 short형으로 캐스팅해서 값을 옮기면 0xAABB가 - (Big Endian가정) *pShort에 들어갈 것이고..
0x20000001을 short형으로 캐스팅해서 값을 옮기면 0xBBCC가 - (Big Endian가정) *pShort에 저장될것 같은데, 질문하신 님께서 두 값이 같다고 하시니 좀 헷갈리네요.
정확한 C표준을 찾아봐야 겠습니다만, 제가 질문을 제대로 해석했고, 실제로 두값이 같다면, 메모리 접근 속도 최적화를 위해서 컴파일러가 홀수 주소를 짝수 주소로 변환(내림으로)시킨게 아닐까 합니다. (그게 표준인지는 모르겠습니다. )
원래 같은 것 아닌가요?
원래 Type이 unsigned char *인데요. 요게 20 00 00 00 요렇게 4바이트로 저장되어 있고요.
unsigned short *으로 캐스팅을 한다면, 2000 0000으로 가리키게 되겠죠.
그래서 그 값의 실제 가리키는 값을 꺼내면, 0x2000이 *pShort에 저장되겠죠.
그래서 20000001을 넣어봤자. 실제 short에는 영향을 주지 않습니다.
요렇게 한다면, pChar의 값에 따라 0x0000과 0x0001이 들어가겠죠.
글쎄요. ..
위 질문에서 언급하신 "pChar의 값이"라는 표현이 아래와 같이 두개지로 해석이 되는데
1. 저장된 값이 0x20000000의 줄임말일 경우 (즉 *pChar==0x20000000 )
2. pChar가 가리키고 있은 주소가 0x20000000 일 경우 (즉 pChar== 0x20000000)
근데.. pChar가 char *형이므로 *pChar에는 0x20000000(4바이트)가 저장될 수 없습니다.
즉 *pChar는 한 바이트 데이터되겠습니다. 그럼 일단 1번은 말이 안됩니다. (0x20000000는 4바이트니까요)
혹시라도 질문하신 님께서 1번의 의미로 질문하신거라면 아래와 같이 되는데
0x???????? :0x20
0x????????+1 :0x00
0x????????+2 :0x00
0x????????+3 :0x00 or 0x01
0x????????는 pChar의 주소가 되겠습니다.
이 경우 0x????????+3의 값에 상관없이 *pShort값은 0x2000이 되겠습니다.
근데 위에서 말씀드린것처럼 *pChar에 0x20000000가 저장 될수 없으므로 질문하신 경우가 아닌것 같습니다.
그럼 2번으로 해석을 해야 하는데, 아래와 같이 가정하면
0x20000000 :0xAA
0x20000001 :0xBB
0x20000002 :0xCC
0x20000003 :0xDD
0x20000000을 short형으로 캐스팅해서 값을 옮기면 0xAABB가 - (Big Endian가정) *pShort에 들어갈 것이고..
0x20000001을 short형으로 캐스팅해서 값을 옮기면 0xBBCC가 - (Big Endian가정) *pShort에 저장될것 같은데, 질문하신 님께서 두 값이 같다고 하시니 좀 헷갈리네요.
정확한 C표준을 찾아봐야 겠습니다만, 제가 질문을 제대로 해석했고, 실제로 두값이 같다면, 메모리 접근 속도 최적화를 위해서 컴파일러가 홀수 주소를 짝수 주소로 변환(내림으로)시킨게 아닐까 합니다. (그게 표준인지는 모르겠습니다. )
--------------------------------------------------------------------------------------
조금씩이라도 전진한다.
댓글 달기