Char 데이터의 주소가 표시되지 않는 이유는 무엇입니까?
다음 코드를 고려하세요.
class Address { public: int i; char b; string c; void showMap(); }; void Address::showMap() { cout << "address of int : " << &i << endl; cout << "address of char : " << &b << endl; cout << "address of string : " << &c << endl; }
이 코드를 실행할 때 , char 변수 'b'의 주소가 출력에 표시되지 않음을 알 수 있습니다. 대신 빈 영역이 표시됩니다. 왜 이런 일이 발생하나요?
그 이유는 주소 연산자(&)가 다양한 데이터 유형에서 작동하는 방식에 있습니다. char 변수 &b에 적용하면 char 포인터, 즉 char *를 얻습니다.
기본적으로 출력 연산자 << 이 char*를 C 스타일 문자열로 해석하고 문자 시퀀스를 인쇄하려고 시도합니다. 하지만 이 경우 char 변수의 값이 아닌 주소만 표시하려고 합니다.
이 문제를 해결하려면 다음 접근 방식을 사용할 수 있습니다.
cout << "address of char : " << (void *) &b << endl;
여기 , 출력 연산자와 함께 사용하기 전에 b의 주소를 void *로 캐스팅합니다. 이렇게 하면 연산자가 이를 문자 시퀀스가 아닌 메모리 위치에 대한 포인터로 처리합니다.
주소 8의 차이점은 무엇입니까?
멤버 변수 'int', 'char' 및 'string'이 공개되면 또 다른 흥미로운 동작을 관찰할 수 있습니다. 'int'와 'string' 주소의 차이는 일관되게 8입니다. 그 이유는 다음과 같습니다.
컴파일러는 클래스 멤버에 메모리를 할당할 때 각 경계에 정렬하는 방식으로 할당합니다. 이 경우 char 변수 'b'는 1바이트를 차지하므로 3바이트의 사용되지 않은 공간이 남습니다. 이 공백 뒤에는 가장 가까운 4바이트 경계에 정렬되는 문자열 변수 'c'가 옵니다.
결과적으로 '&c'와 '&b' 주소 간의 차이는 1( 'b'의 경우) 3(사용되지 않은 공간의 경우) 4('c'의 4바이트 정렬의 경우) = 8.
위 내용은 C에서 Char 변수의 주소가 올바르게 표시되지 않는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!