王跌宕 发表于 2021-12-6 16:44:27

关于c++ string类的back函数

刚才随手一敲的想法让我傻住了,有没有大佬帮忙解答{:10_266:}

#include<string>
#include<iostream>
using namespace std;
int main(){
    string a = "2PI";
    cout << &a.back() - 2;
    return 0;
}

1.众所周知string类back函数返回一个引用,那如果给引用加个取地符那&a.back()是什么类型的数据呢?
2.为什么上述代码可以一次性输出2PI,改成cout << &a.back() - 1;则可以输出PI?
请求知道的大佬们随手帮我指点迷津{:10_291:}

jhq999 发表于 2021-12-6 16:44:28

本帖最后由 jhq999 于 2021-12-6 17:51 编辑

a.back()返回字符串里'I'这个字符的引用,取它的地址指针就是字符'I'在字符串的地址指针,所以&a.back() - 1指针位置在字符串里字符'P'的位置

lhgzbxhz 发表于 2021-12-7 20:40:16

1、对引用进行取地址运算返回相对应的指针类型(例如int& --> int*)
2、std::string内部绝大部分是使用字符指针实现的,所以&a.back()相当于'I'所对应的地址,-2就是'2'对应的地址,-1就是'P'对应的地址
(警告:这种行为不可取,c++标准没有规定string内部一定要是以'\0'结尾的字符指针,应当使用c_str()或者data()方法取得地址)
页: [1]
查看完整版本: 关于c++ string类的back函数