2010-05-01 4 views
1

이제이포인터 및 주소

char *str = "Idle mind is a devil's workshop"; 
int nLen = strlen(str); 

char* ptr; 
ptr = new char[nLen+1]; 

strcpy(ptr,str); 

cout<<ptr<<endl;//this wil print the string 

을 고려하지만,이 캐릭터 라인의 주소를 인쇄 할 수 야해 아래의 예를

int nCount[2] = {5,10}; 
int* ptrInt; 
ptrInt = nCount; 
cout<<ptrInt<<Endl;//this will print the address of arrar nCount 

을 고려하십시오. 나는 그 차이를 꽤 얻지 못하고있다.

답변

7

char*은 문자열 저장에 자주 사용되므로 operator<<에 오버로드되어 char*에 포인터가 가리키는 문자열을 인쇄합니다.

포인터를 출력하려면 포인터를 void*으로 캐스팅 한 다음 출력 할 수 있습니다. 당신이 주소를 원하는 경우

1

:

cout << (void *) ptr < <endl; 

< < 연산자 유형의 많은에 대한 과부하 -의 char *에 대한, 그것은이 주소를 인쇄 * 무효를 들어, 문자열을 인쇄합니다.

1

글쎄, char*을 특별한 경우로 다루는 스트림 연산자에 대한 오버로딩이 있습니다. 다른 모든 유형의 포인터는 void* 오버로드를 사용합니다.

basic_ostream<charT,traits>& operator<<(const void* p); // all types of pointers 

template<class charT, class traits> // except for c-strings 
basic_ostream<charT,traits>& operator<<(basic_ostream<charT,traits>&, 
const char*); 
+0

표준 스트림은 다른 유형의 문자를 처리 할 수 ​​있지만 그 대답은 내 답변에 추가하지 않을 것입니다. – AraK