为什么字符串的行为不同?

Why do & behave differently for strings?

本文关键字:字符串 为什么      更新时间:2023-10-16
#include <iostream>
#include <string.h>
using namespace std;
int main()
{
    char x[100]="hello";
    int s=strlen(x);
    cout<<&(x[0]);
}

如果我编译并运行它,

输出是你好

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

因为operator <<被重载了,const char*打印const char*指向的零端的C字符串。

指针

不保留信息,无论它们指向数组的单个对象还是第一个对象。还要考虑到表达式中的数组名称将转换为指向其第一个元素的指针。因此,例如,如果您有这样的 const char * 类型的指针

const char *p = "Hello";

那么自然会期待这种说法

std::cout << p << std::endl;

将输出字符串文字"Hello"。

如果要输出字符串文本的第一个元素的地址,则必须对类型为 void * 的指针使用另一个重载operator <<

std::cout << ( const void * )p << std::endl;

因此,如何处理 char * 类型的指针存在一个难题,因此解决了将此类指针视为指向字符串第一个元素的指针并因此输出整个字符串的问题。