char*array的基本地址,用c ++表示

cur*_*eek -3 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;
}
Run Code Online (Sandbox Code Playgroud)

我认为,印刷&str[0]应该给的地址0是一样的元素(int*)str,基址.请解释.

Som*_*ude 7

&str[0] 确实给你第一个字符的地址.但是,它的类型char*被解释为以null结尾的字符串,并且操作符的相应char*重载<<将用于将其作为字符串打印.

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

static_cast<void*>(&str[0])
Run Code Online (Sandbox Code Playgroud)

在一个非常相关的说明,不要忘了,&str[0]恰好等于平淡str.

另外不要忘记在C++中,文字字符串实际上是常量字符串,因此str应该是类型char const*(或更常见const char*).