문자 데이터 표시 불일치 주소
제공된 C 코드에서 클래스 멤버의 주소 출력에 예외가 나타납니다. char 데이터 멤버 "b"는 빈 공간으로 표시됩니다.
이러한 동작의 이유는 주소 연산자 및 삽입 연산자 "<<" char 유형을 해석합니다. "b"의 주소를 얻으면 char * 포인터가 생성됩니다. 그러나 삽입 연산자는 이를 C 스타일 문자열로 해석하고 주소가 아닌 내용을 인쇄하려고 시도합니다.
이를 수정하려면 "b" 주소를 void 포인터로 캐스팅할 수 있습니다. "(void ) &b"와 같은 C 스타일 캐스트를 사용하거나 "static_cast
주소 차이(문자열과 문자)의 미스터리
또 다른 관찰은 클래스 멤버가 int , char 및 string은 public으로 선언되고 "char"의 주소는 빈 문자열로 표시되는 반면 "string"의 주소와 "int"의 주소 차이는 항상 8입니다(not 9).
이 차이는 객체가 메모리에 저장되는 방식에서 발생합니다. 문자열 데이터 유형은 종료 널 문자를 포함하여 연속적인 문자 블록으로 구현됩니다. 이 널 문자는 문자열 크기에 추가 바이트를 효과적으로 추가합니다.
따라서 "string" 주소와 "int" 주소 간의 차이는 8바이트입니다. 이는 문자열 데이터 유형의 크기에 1을 더한 크기를 나타냅니다. 널 종결자. 대조적으로, char 데이터 유형에는 널 종결자가 없으므로 주소가 인쇄될 때 빈 표시가 발생합니다.
위 내용은 내 C 코드에 `char` 멤버에 대한 빈 주소가 표시되고 `int`와 `string` 멤버 사이에 8바이트 주소 차이가 표시되는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!