C\#포인터 가 해결 되 지 않 았 습 니 다.

10427 단어 C++cC#
다음 코드 고려:
C# code

  
<!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --> unsafe { byte b = 3 ; double d = 10.0 ; int i = 5 ; byte * pb = & b; double * pd = & d; int * pi = & i; Console.WriteLine( " Address of b is 0x{0:X},size is {1},value is {2} " , ( uint )pb, sizeof ( byte ), b); Console.WriteLine( " Address of d is 0x{0:X},size is {1},value is {2} " , ( uint )pd, sizeof ( double ), d); Console.WriteLine( " Address of i is 0x{0:X},size is {1},value is {2} " , ( uint )pi, sizeof ( int ), i); Console.WriteLine( " Address of pb is 0x{0:X},size is {1},value is 0x{2:X} " , ( uint ) & pb, sizeof ( byte * ), ( uint )pb); Console.WriteLine( " Address of pd is 0x{0:X},size is {1},value is 0x{2:X} " , ( uint ) & pd, sizeof ( double * ), ( uint )pd); Console.WriteLine( " Address of pi is 0x{0:X},size is {1},value is 0x{2:X} " , ( uint ) & pi, sizeof ( int * ), ( uint )pi); }

내 기계 에 표 시 된 출력 결 과 는?
Addressofbis0x12F46C,sizeis1,valueis3
Addressofdis0x12F464,sizeis8,valueis10
Addressofiis0x12F460,sizeis4,valueis5
Addressofpbis0x12F45C,sizeis4,valueis0x12F46C
Addressofpdis0x12F458,sizeis4,valueis0x12F464
Addressofpiis0x12F454,sizeis4,valueis0x12F460
지금 제 문 제 는 코드 를 보면 스 택 은 높 은 주소 에서 낮은 주소 로 채 워 야 합 니 다.by te 는 1 바이트 만 차지 하고 32 비트 프로세서 시스템 스 택 의 메모리 블록 은 항상 4 바이트 의 배수 에 따라 분 배 됩 니 다.b 의 주 소 는 0x12F46C 입 니 다.그러면 b 의 이 값 은 0x12F468~0x12F46B 에 저장 되 어야 합 니 다.4 개의 바이트 를 차지 한 다음 에 d 에 메모 리 를 분배 해 야 합 니 다.double 유형 은 8 개의 바이트 를 차지 합 니 다.주 소 는 0x12F 468 이 어야 합 니 다.d 는 0x12F 460~0x12F 467 에 저장 해 야 합 니 다.그런데 왜 출력 결과 b 는 8 개의 바이트 의 메모 리 를 차지 하고 d 는 4 개의 바이트 의 메모리 만 차지 합 니까?
그리고 코드 의 마지막 세 줄 을 없 애 면
C# code

  
<!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --> unsafe { byte b = 3 ; double d = 10.0 ; int i = 5 ; byte * pb = & b; double * pd = & d; int * pi = & i; Console.WriteLine( " Address of b is 0x{0:X},size is {1},value is {2} " , ( uint )pb, sizeof ( byte ), b); Console.WriteLine( " Address of d is 0x{0:X},size is {1},value is {2} " , ( uint )pd, sizeof ( double ), d); Console.WriteLine( " Address of i is 0x{0:X},size is {1},value is {2} " , ( uint )pi, sizeof ( int ), i); }

출력 결과
Addressofbis0x12F45C,sizeis1,valueis3
Addressofdis0x12F460,sizeis8,valueis10
Addressofiis0x12F468,sizeis4,valueis5
메모리 분 배 는 낮은 주소 에서 높 은 주소 로 위로 채 워 지 는 것 으로 바 뀌 었 습 니 다.그러나 이때 b 는 4 개의 바이트,d 는 8 개의 바이트 를 차 지 했 습 니 다.어떻게 해 야 합 니까?

좋은 웹페이지 즐겨찾기