C ++中的char *数组的基地址

时间:2018-11-02 14:17:49

标签: c++ arrays

#include <iostream>
using namespace std;

int main() {

    char* str = "geek";

    //why is this not giving base address of str i.e. (int*)str
    cout<<&str[0];

    //output:
    //geek

    return 0;
}

我认为打印&str[0]应提供与0相同的第(int*)str th 元素的地址,即基地址。 请解释。

1 个答案:

答案 0 :(得分:7)

&str[0] do 给您第一个字符的地址。 但是的类型为char*,它被解释为以空值结尾的字符串,并且char*运算符的相应<<重载将用于打印作为字符串。

您需要将指针转换为更通用的类型,例如void*

static_cast<void*>(&str[0])

在一个非常相关的注释上,请不要忘记&str[0] 完全等于普通str

也不要忘记,在C ++中,文字字符串实际上是恒定文字字符串,因此str的类型应为char const*(或更常见的{{1 }}。