这是我写的一个简单的代码。指针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;
}
答案 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,则会看到地址。