char * str =" ab",str和& str

时间:2015-07-17 00:41:44

标签: c++ c string pointers

我正在学习指针,这是我的代码。我定义了一个指向char(实际上是字符串)*str的指针和一个指向int *a的指针,它们以相同的方式定义。我认为stra都应该是一个地址,但当我尝试输出str&stra&a时,我发现str不是地址,而是字符串。根据{{​​1}}和*str的类型,char *a和int str之间有什么区别?谢谢。

a

这是输出:

#include<iostream>
#include<string>
using namespace std;
int main()
{
        char *str = "FA";
        cout << "str: " << str << endl;
        cout << "&str: " << &str << endl;

        int b = 5;
        int *a = &b;
        cout << "a: " << a << endl;
        cout << "&a: " << &a << endl;
}

2 个答案:

答案 0 :(得分:4)

嗯,这归结为C语义。字符串是C中定义的类型。char单个字符的类型。为了处理C中的字符串,按照惯例,指向char的指针表示一个字符串,该字符串从该指针指向的位置开始,并以第一个0字节结束。

说清楚:

char *str = "ABC";

“翻译”为类似

的内容
const char <nosymbol>[4] = {'A', 'B', 'C', '\0'};
char *str = &(<nosymbol>[0]);

C ++知道char *的这种特殊含义,因此<<运算符将遵循C程序员的最少意外原则,取char * }作为一个字符串。

答案 1 :(得分:3)

流的<<运算符有char *的重载,它输出C样式的字符串。这通常是您想要的,但如果不是您想要的,您可以使用reinterpret_cast<void*>addressof