为什么&字符串表现不同?

时间:2015-02-24 14:15:22

标签: c++ string char

#include <iostream>

#include <string.h>

using namespace std;

int main()

{

    char x[100]="hello";

    int s=strlen(x);

    cout<<&(x[0]);

}

如果我编译并运行它,

输出是hello

为什么输出不是字符'h'的地址?

2 个答案:

答案 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 *类型的指针是一个两难的问题,并且有利于将这些指针视为指向字符串的第一个元素的指针,从而输出整个字符串。