字符* str= "ab" , str 和 &str 的混淆

confusion of char* str="ab", str and &str

本文关键字:str ab 字符      更新时间:2023-10-16

我正在学习指针,这是我的代码。我定义了一个指向char(实际上是字符串)*str的指针和一个指向int *a的指针,它们以相同的方式定义。我认为stra都应该是一个地址,但是当我试图输出str&str, a&a时,我发现str不是地址,它是字符串。就stra的类型而言,char *str和int *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;
}

输出:

str: FA
&str: 0x7fff5a627280
a: 0x7fff5a62727c
&a: 0x7fff5a627288

好吧,这归结为C语义。字符串是而不是c语言定义的类型。char单个字符的类型。为了在C语言中处理字符串,按照惯例,指向char的指针意味着从该指针指向的位置开始,并在0的第一个字节结束的字符串。

说明:

char *str = "ABC";

"翻译"成类似

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

c++知道char *的特殊含义,因此,<<运算符将遵循C程序员最小意外原则,将char *作为字符串。

流的<<操作符重载char *,输出c风格的字符串。这通常是你想要的,但如果不是你想要的,你可以使用reinterpret_cast<void*>addressof