Char 데이터 표시 이상 주소
int, char, string 등 다양한 타입의 데이터 멤버로 구성된 클래스를 포함하는 프로그램에서, 이러한 데이터 멤버의 주소를 인쇄할 때 예상치 못한 관찰이 나타납니다. int 및 string의 주소가 표시되는 동안 char 데이터 멤버의 주소는 공백으로 나타납니다.
이 문제를 해결하려면 char 데이터 유형의 기본 표현을 고려하십시오. & 연산자를 사용하여 char 변수의 주소를 얻으면 char에 대한 포인터를 얻습니다. 그러나 스트림 삽입 연산자(<<)는 이 포인터를 C 스타일 null 종료 문자열로 해석합니다. 결과적으로, 이 경우에는 존재하지 않는 포인터와 관련된 문자열을 인쇄하려고 시도합니다.
이 동작을 수정하려면 static_cast를 사용하여 char 변수의 주소를 void 포인터로 명시적으로 캐스팅합니다. 이렇게 하면 스트림 삽입 연산자에 값을 문자열이 아닌 주소로 해석하도록 지시하게 됩니다.
<br>cout << "문자의 주소:" << static_cast<void *>(&b) << endl;<br>
또한 클래스 데이터 멤버가 공개로 선언되면 흥미로운 일이 발생합니다. 이제 char 변수의 주소가 표시되지만 int 변수의 주소와 비교하여 8바이트의 오프셋이 있습니다.
<br> ... int : Something <br> .. . char : Something_2<br> ... string : Something_3<br>
흥미롭게도, Something_2 - Something은 항상 8입니다. 이는 효율적인 메모리 레이아웃을 위해 클래스 멤버에 적용된 패딩에서 비롯됩니다. char 변수는 1바이트만 차지함에도 불구하고 정렬 요구 사항으로 인해 4바이트를 할당합니다. 이 3바이트 패딩은 관찰된 오프셋을 생성합니다.
위 내용은 클래스에 있는 Char 멤버의 주소 인쇄가 때때로 공백으로 나타나는 이유는 무엇이며, 그렇지 않은데 8바이트 오프셋이 있는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!