>백엔드 개발 >C++ >내 C Char 회원의 주소가 공백으로 인쇄되는 이유와 8바이트 오프셋이 있는 이유는 무엇입니까?

내 C Char 회원의 주소가 공백으로 인쇄되는 이유와 8바이트 오프셋이 있는 이유는 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2025-01-03 02:51:38830검색

Why Does My C   Char Member's Address Print Blank, and Why Is There an 8-Byte Offset?

주소 인쇄 이상한 디버깅

int, char 및 문자열 데이터 멤버가 있는 클래스가 포함된 C 프로그램에서 해당 주소를 인쇄하면 오류가 발생합니다. 눈썹. char 멤버에 액세스하면 출력이 이상하게도 공백으로 유지됩니다. 또한 공개 문자 멤버를 void 포인터로 캐스팅하면 오프셋 8이 나타나 추가 조사가 시작됩니다.

문자 주소 누락:

빈 문자 주소 관련 문제 출력은 & 연산자가 해석되는 방식에서 비롯됩니다. 기본적으로 char 변수에 &를 사용하면 C 스타일 문자열(char)에 대한 포인터가 반환됩니다. 이로 인해 과부하된 << 문자열 스트림의 연산자를 사용하여 변수를 문자 배열로 처리하고 해당 주소가 아닌 문자열로 인쇄합니다.

문제 해결:

char 멤버의 주소를 올바르게 지정하려면 void*로의 명시적인 캐스트가 필요합니다. 이 캐스트는 포인터가 일반 포인터로 처리되어야 함을 나타내며 << 연산자가 이를 C 문자열로 해석하지 못하게 합니다. 수정된 코드:

cout << "address of char   :" << (void*) &b << endl;

또는 static_cast를 사용하는 것이 최신 C에서 포인터를 캐스팅하는 데 더 안전하고 선호되는 방법입니다.

cout << "address of char   :" << static_cast( &b ) << endl;

공용 멤버에서 8 오프셋:

int, char 및 string 멤버가 공개된 경우, char 및 string 멤버의 주소는 항상 8입니다. 이는 공용 클래스에서 멤버 변수가 선언된 순서대로 클래스 구조 내에 배치되기 때문입니다. 따라서 string 멤버는 8바이트의 고정 오프셋에서 char 멤버 뒤에 옵니다.

위 내용은 내 C Char 회원의 주소가 공백으로 인쇄되는 이유와 8바이트 오프셋이 있는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.