주소 인쇄 이상한 디버깅
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!