> 백엔드 개발 > C++ > 내 C 코드에 `char` 멤버에 대한 빈 주소가 표시되고 `int`와 `string` 멤버 사이에 8바이트 주소 차이가 표시되는 이유는 무엇입니까?

내 C 코드에 `char` 멤버에 대한 빈 주소가 표시되고 `int`와 `string` 멤버 사이에 8바이트 주소 차이가 표시되는 이유는 무엇입니까?

DDD
풀어 주다: 2024-12-30 02:38:09
원래의
982명이 탐색했습니다.

Why Does My C   Code Show an Empty Address for a `char` Member and an 8-Byte Address Difference Between `int` and `string` Members?

문자 데이터 표시 불일치 주소

제공된 C 코드에서 클래스 멤버의 주소 출력에 예외가 나타납니다. char 데이터 멤버 "b"는 빈 공간으로 표시됩니다.

이러한 동작의 이유는 주소 연산자 및 삽입 연산자 "<<" char 유형을 해석합니다. "b"의 주소를 얻으면 char * 포인터가 생성됩니다. 그러나 삽입 연산자는 이를 C 스타일 문자열로 해석하고 주소가 아닌 내용을 인쇄하려고 시도합니다.

이를 수정하려면 "b" 주소를 void 포인터로 캐스팅할 수 있습니다. "(void ) &b"와 같은 C 스타일 캐스트를 사용하거나 "static_cast(&b)"와 같은 더 안전한 대안을 사용하는 것이 좋습니다. 이렇게 하면 "b" 주소가 올바르게 인쇄됩니다.

주소 차이(문자열과 문자)의 미스터리

또 다른 관찰은 클래스 멤버가 int , char 및 string은 public으로 선언되고 "char"의 주소는 빈 문자열로 표시되는 반면 "string"의 주소와 "int"의 주소 차이는 항상 8입니다(not 9).

이 차이는 객체가 메모리에 저장되는 방식에서 발생합니다. 문자열 데이터 유형은 종료 널 문자를 포함하여 연속적인 문자 블록으로 구현됩니다. 이 널 문자는 문자열 크기에 추가 바이트를 효과적으로 추가합니다.

따라서 "string" 주소와 "int" 주소 간의 차이는 8바이트입니다. 이는 문자열 데이터 유형의 크기에 1을 더한 크기를 나타냅니다. 널 종결자. 대조적으로, char 데이터 유형에는 널 종결자가 없으므로 주소가 인쇄될 때 빈 표시가 발생합니다.

위 내용은 내 C 코드에 `char` 멤버에 대한 빈 주소가 표시되고 `int`와 `string` 멤버 사이에 8바이트 주소 차이가 표시되는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿