指向char数组的指针,指针的值不是一个地址?

时间:2013-11-06 10:10:05

标签: c++ arrays pointers char

这是我写的一个简单的代码。指针p的值是我们所知道的数组a的地址 但是,为什么指针不存储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;
}

2 个答案:

答案 0 :(得分:3)

  

为什么指针不存储c1

的地址

确实如此。

您所看到的是std::ostream::operator<<char*有重载的事实,将其视为字符串而不是指针。如果你使用

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

你会发现它按预期工作。

答案 1 :(得分: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,则会看到地址。