#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 元素的地址,即基地址。
请解释。
答案 0 :(得分:7)
&str[0]
do 给您第一个字符的地址。 但是的类型为char*
,它被解释为以空值结尾的字符串,并且char*
运算符的相应<<
重载将用于打印作为字符串。
您需要将指针转换为更通用的类型,例如void*
:
static_cast<void*>(&str[0])
在一个非常相关的注释上,请不要忘记&str[0]
完全等于普通str
。
也不要忘记,在C ++中,文字字符串实际上是恒定文字字符串,因此str
的类型应为char const*
(或更常见的{{1 }}。