0

これが私が書いた簡単なコードです。ポインター p の値は、ご存知のように配列 a のアドレスです。
しかし、ポインタ s が c1 のアドレスを格納しないのはなぜですか?
それはどのように機能しますか!

int main(int argc, const char * argv[])
{
    int a[4] = {4,3,2,1};
    int*p = a;
    cout<<&a<<endl;//output 0x7fff5fbff8a0
    cout<<p<<endl; //oupput 0x7fff5fbff8a0

    char c1[4] = "abc";
    char *s = c1;
    cout<<&c1<<endl;//output 0x7fff5fbff894
    cout<<s<<endl; //output abc
    return 0;
}
4

2 に答える 2

3

ポインター s が c1 のアドレスを格納しないのはなぜですか

します。

あなたが見ているstd::ostream::operator<<のは、 のオーバーロードがありchar*、ポインターではなく文字列として扱っているという事実です。使用する場合

printf("%p\n", s);

期待どおりに動作することがわかります。

于 2013-11-06T10:12:51.967 に答える
1

これは、演算子のオーバーロードと呼ばれます:

//char* goes here:
std::ostream& operator<<(std::ostream &s, const char* p)
{ 
  //print the string
}

//int* goes here:
std::ostream& operator<<(std::ostream &s, const int* p)
{ 
  //print the address
}

ポインターを int にキャストすると、アドレスが表示されます。

于 2013-11-06T10:30:07.910 に答える