2

でcharポインターを出力するとprintf()、変換指定子を使用して、アドレスを出力するか、%uまたは%sに従って文字列全体を出力するかが決定されます。

しかし、同じことをしたい場合、アドレスと文字列全体の中で何を出力するかcoutをどのように決定しますか?coutソースの例を次に示します。

int main()
{
  char ch='a';
  char *cptr=&ch;
  cout<<cptr<<endl;
  return 0;
}

ここで、私のGNUコンパイラでcoutは、chを文字列として出力しようとしています。

chcptr使用してアドレスを取得するにはどうすればよいcoutですか?

4

4 に答える 4

15

過負荷解像度は、 ostream& operator<<(ostream& o, const char *c);Cスタイルの文字列の印刷に使用されるものを選択します。もう一方ostream& operator<<(ostream& o, const void *p);を選択する必要があります。あなたはおそらくここでキャストするのが最善です:

 cout << static_cast<void *>(cptr) << endl;
于 2012-06-03T10:17:32.647 に答える
7

coutを受け取った場合は文字列を出力しますchar *。そのように単純です。

のオーバーロードは次のとおりoperator <<です。ostream

ostream& operator<< (bool val);
ostream& operator<< (short val);
ostream& operator<< (unsigned short val);
ostream& operator<< (int val);
ostream& operator<< (unsigned int val);
ostream& operator<< (long val);
ostream& operator<< (unsigned long val);
ostream& operator<< (float val);
ostream& operator<< (double val);
ostream& operator<< (long double val);
ostream& operator<< (const void* val);

ostream& operator<< (streambuf* sb);

ostream& operator<< (ostream& ( *pf )(ostream&));
ostream& operator<< (ios& ( *pf )(ios&));
ostream& operator<< (ios_base& ( *pf )(ios_base&));

ostream& operator<< (ostream& out, char c );
ostream& operator<< (ostream& out, signed char c );
ostream& operator<< (ostream& out, unsigned char c );


//this is called
ostream& operator<< (ostream& out, const char* s );
ostream& operator<< (ostream& out, const signed char* s );
ostream& operator<< (ostream& out, const unsigned char* s );

アドレスが必要な場合は、次のようにします。

ostream& operator<< (const void* val);

したがって、にキャストする必要がありますconst void*

于 2012-06-03T10:16:40.573 に答える
4

私はそれをvoid*にキャストするだけなので、C文字列として解釈しようとはしません。

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

ただし、より安全なオプションは、dirkgentlyの回答のようにstatic_castを使用することです(そうすれば、キャストは少なくともコンパイル時にチェックされます)。

于 2012-06-03T10:17:16.843 に答える
0

Luchianが言ったように、coutはタイプに基づいて何を印刷するかを知っています。ポインター値を出力したい場合は、ポインターをvoid *にキャストする必要があります。これは、ポインターとして挿入されます。

于 2012-06-03T10:18:20.977 に答える