#include <iostream>
#include <string.h>
using namespace std;
int main()
{
char x[100]="hello";
int s=strlen(x);
cout<<&(x[0]);
}
如果我编译并运行它,
输出是hello
为什么输出不是字符'h'的地址?
答案 0 :(得分:10)
因为operator <<
重载const char*
以打印const char*
指向的以零结尾的C字符串。
答案 1 :(得分:1)
指针不保留信息,无论它们指向单个对象还是数组的第一个对象。还要考虑表达式中的数组名称转换为指向其第一个元素的指针。因此,如果您有类似const char *
类型的指针
const char *p = "Hello";
然后自然会期待这个陈述
std::cout << p << std::endl;
将输出字符串文字“Hello”。
如果要输出字符串文字的第一个元素的地址,则必须使用另一个重载的operator <<
作为void *
类型的指针
std::cout << ( const void * )p << std::endl;
所以如何处理char *
类型的指针是一个两难的问题,并且有利于将这些指针视为指向字符串的第一个元素的指针,从而输出整个字符串。